>  기사  >  Java  >  Java 익명 내부 클래스 전달 값

Java 익명 내부 클래스 전달 값

高洛峰
高洛峰원래의
2016-12-15 13:01:081233검색

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 - 객체 배열 방법은 최종 객체 객체 배열을 사용하여 필요한 값을 저장합니다. ​​

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 인터페이스를 구현하고 값을 가져오고 설정하는 두 가지 메소드를 추가하는 Nutz의 내장 추상 클래스입니다. 🎜>

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(); 
}

Java에서 익명 내부 클래스의 값 전달과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.