Heim  >  Artikel  >  Java  >  Anonyme innere Java-Klasse, die einen Wert übergibt

Anonyme innere Java-Klasse, die einen Wert übergibt

高洛峰
高洛峰Original
2016-12-15 13:01:081233Durchsuche

In Nutz gibt es viele Situationen, in denen anonyme interne Klassen verwendet werden müssen. Viele Kinder sind verwirrt über die Übergabe von Werten, daher erkläre ich hier

Übergabe:

//匿名内部类,只能访问final的本地变量及方法参数 
public void addUser(final String name, String passwd, final String userType) { 
    User user = null; 
    if ("admin".equal(userType)) 
        user = new AdminUser(name, passwd); //仅作演示. 
    else 
        user = new User(name, passwd); 
    final User _user = user; //因为user变量不能设置为final,所以需要新加一个变量来中转 
    Trans.run(new Atom(){ 
        public void run() { 
            dao.insert(_user); 
            if (log.isDebugEnable()) 
                log.debugf("Add user id=%d, name=%s , type=%s", _user.getId(), name, userType); 
        } 
    }); 
}

Ausgehend (Methodenrückgabewert abrufen usw.):

Methode 1 – Objektarray-Methode verwendet ein endgültiges Objektobjektarray, um die erforderlichen Werte zu speichern

public long countUser(final String userType) { 
    final Object[] objs = new Object[1]; 
    Trans.run(new Atom(){ 
        public void run() { 
            objs[0] = dao.count(User.class, Cnd.where('userType', '=', userType)); 
        } 
    }); 
    return ((Number)objs[0]).longValue(); 
}


Methode 2 – ThreadLocal-Methode verwendet ein ThreadLocal zum Speichern der Ergebnisse. Dieses ThreadLocal kann statisch sein und von der gesamten App verwendet werden

private static final ThreadLocal re = new ThreadLocal(); //自行补上泛型Object 
public long countUser(final String userType) { 
    Trans.run(new Atom(){ 
        public void run() { 
            re.set(dao.count(User.class, Cnd.where('userType', '=', userType))); 
        } 
    }); 
    return ((Number)re.get()).longValue(); //严谨一点的话,应该将ThreadLocal置空 
}


Methode 3 – Molecule-Methode Die Molecule-Klasse ist die integrierte abstrakte Klasse von Nutz, die die Schnittstellen Runnable und Atom implementiert und zwei Methoden zum Abrufen/Festlegen von Werten hinzufügt 🎜>

public long countUser(final String userType) { 
    Molecule mole = new Molecule() { //需要自行补齐泛型 
        public void run() { 
            setObj(dao.count(User.class, Cnd.where('userType', '=', userType))); 
        } 
    }; 
    Trans.run(mole); 
    return ((Number)mole.getObj()).longValue(); 
}

Weitere Artikel zur Wertübergabe anonymer interner Klassen in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn