2
이 클래스를 고려얼마나 많은 로컬 메서드 익명 클래스가 만들어 졌습니까?
public class Activity {
public ArrayList<testInterface> containerListener = new ArrayList<testInterface>();
public void metodoDiProva(int num) {
final int finalNum = num;
containerListener.add(new testInterface() {
@Override
public void metodoDiProva() {
System.out.println(finalNum);
}
});
}
}
지금 바로이 방법을 찾습니다
public void metodoDiProva(int num) {
final int finalNum = num;
containerListener.add(new testInterface() {
@Override
public void metodoDiProva() {
System.out.println(finalNum);
}
});
}
는 예를 들어, metodoDiProva(int num)
2 번이라고 상상해의 ArrayList를 너무
activityObj.metodoDiProva(10);
activityObj.metodoDiProva(20);
을 청취자에는 2 개의 객체가 있습니다.
Th E 제 리스너 오브젝트은 finalNum 변수, 이 변수의 값 10 인을 사용할 수있다.
개체은 finalNum 변수, 이 변수의 값을 사용할 수제 20 청취자이다.
질문은 :
메모리에는 2 개의 다른 InnerClas가 있습니까? 아니면 단지 1 개입니까?
감사합니다. firstListener의 경우 finalNum 변수의 값을 10으로 유지하고 두 번째 값이 20 인 경우 누가 감사합니까? listenerObject? 내 말은 : 최종 변수의 값을 유지하는 익명 클래스의 인스턴스입니까? –
내부 클래스는 장면 뒤의 지역 변수에 대한 암시 적 멤버 변수를 가져옵니다. 로컬 변수가 내부 변수와 내부 클래스 사이의 일관성을 보장 할 수 있도록 로컬 변수가 final (또는 Java 8의 경우 효과적으로 final)해야하는 이유이기도합니다. – rgettman
이 이해하지만, 코드를 보면, 첫 번째 Listener에 대해 (익명 클래스 내부의) final 변수의 값은 10이며, secondListener (익명 클래스 내부)의 값은 20입니다. 수업. 그래서 ... 누가 firstListener에 대해 값 10을 유지하고 secondListener에 대해 값 20을 유지합니까? 여전히 내부 익명 클래스 또는 내부 익명 클래스의 인스턴스? –