値を渡す Java 匿名内部クラス

高洛峰
リリース: 2016-12-15 13:01:08
オリジナル
1235 人が閲覧しました

Nutz では、匿名内部クラスを使用する必要がある場面が多く、値の受け渡しについて混乱している子も多いので、ここで説明します

受信:

//匿名内部类,只能访问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); 
        } 
    }); 
}
ログイン後にコピー

送信 (メソッドの戻り値の取得など) :

メソッド 1 – オブジェクト配列メソッドは、最終的な Object オブジェクト配列を使用して必要な値を保存します。

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(); 
}
ログイン後にコピー


メソッド 2 – ThreadLocal メソッドは、ThreadLocal を使用して結果を保存します。この ThreadLocal は静的であり、アプリ全体で使用されます

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置空 
}
ログイン後にコピー


メソッド 3 – Molecule メソッド Molecule クラスは、Runnable インターフェイスと Atom インターフェイスを実装し、値を取得/設定するための 2 つのメソッドを追加します。


その他の Java 匿名内部クラスの値の受け渡しに関連する記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート