Heim >Java >javaLernprogramm >Anonyme innere Java-Klasse, die einen Wert übergibt
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!