익명의 내부 클래스 내에서 final이 아닌 로컬 변수를 사용할 수 없다는 것을 알았으므로 인스턴스 변수를 선언하지 않고 내부 클래스 내부의 값을 변경해야 할 때 까다로운 방법이 있습니까?내부 클래스 내부에서 로컬 변수의 값을 변경하는 방법은 무엇입니까?
답변
진행하기 전에 고려해야 할 충분한 이유 때문에 사용할 수 없습니다. 익명의 클래스의 인스턴스로 정확히 무엇을 할 것입니까? 이 메소드의 범위 내에서, 로컬에만 소비되는 경우,이 간단한 트릭을 사용할 수 있습니다 (의 당신은 int
VAR가 있다고 가정하자) :
final int localVar[] = {1};
new AnonymousClass() {
public void method() { localVar[0]++; }
};
를 인스턴스가 반환 만든 방법 후 도달 할 경우, 스레드 안전 문제가 발생할 수 있습니다. 인스턴스가 다른 스레드로 전달 될 수 있으며 위의 단순한 디자인은 스레드로부터 안전하지 않습니다.
내 코드에서 익명의 내부 클래스는 메서드가 끝난 후에도 접근 할 수 있지만 여전히 까다로운 thnx입니다. – Morteza
이 스 니펫을 사용할 수 있습니다.
void someMethod(){
final AtomicReference<String> var = new AtomicReference<String>("Blah")
foo(new Bar(){
void baz(){
var.set("Blah-blah");
}
});
}
예. 나는 나의 모범을 편집했다. – talex
매우 간단하게 쓸 수 있습니다. Holder
.
/**
* Make a final one of these to hold non-final things in.
*/
public class Holder <T> {
private T held = null;
public Holder() {
}
public Holder (T it) {
held = it;
}
public void hold(T it) {
held = it;
}
public T held() {
return held;
}
@Override
public String toString() {
return String.valueOf(held);
}
}
원자력을 사용하지 마십시오. 상당한 오버 헤드가 있습니다.
final Holder<Integer> number = new Holder(0);
... {
number.hold(n);
}
...
return number.held();
- 1. 중첩 클래스의 내부 클래스 내부에서 객체를 만들고 사용하는 방법은 무엇입니까?
- 2. 내부 함수/스트림 수신기 내부에서 함수 값을 반환하는 방법은 무엇입니까?
- 3. 클래스의 배열 내부에서 값을 초기화하거나 변경하는 방법은 무엇입니까?
- 4. Jquery를 사용하여 함수 내부에서 적절한 값을 변경하는 방법은 무엇입니까?
- 5. 루비에서 url 매개 변수의 값을 변경하는 방법은 무엇입니까?
- 6. Bash에서 두 번째 레벨 변수의 값을 변경하는 방법은 무엇입니까?
- 7. 인수로 전달 된 변수의 값을 변경하는 방법은 무엇입니까?
- 8. 다른 파일에있는 extern 변수의 값을 변경하는 방법은 무엇입니까?
- 9. makefile의 while 루프 내에서 변수의 값을 변경하는 방법은 무엇입니까?
- 10. 페이지를로드 할 때마다 PHP 변수의 값을 변경하는 방법은 무엇입니까?
- 11. 자바에서 구현하는 클래스에 의해 인터페이스에서 변수의 값을 변경하는 방법은 무엇입니까?
- 12. 다른 방법으로 로컬 변수의 값을 사용하는 방법은 무엇입니까?
- 13. 변수의 값을 수정하는 방법은 무엇입니까?
- 14. 내부에서 iframe z- 인덱스를 변경하는 방법은 무엇입니까?
- 15. 사용 장소 로컬 내부 클래스
- 16. Jquery에서 변수의 속성을 변경하는 방법은 무엇입니까?
- 17. 긴 변수의 표시 형식을 변경하는 방법은 무엇입니까?
- 18. 표현식에서 매개 변수의 유형을 변경하는 방법은 무엇입니까?
- 19. 자바 코어 : 값을 변경하는 변수의 데이터 유형
- 20. WinDbg에서 멤버 변수의 값을 보는 방법은 무엇입니까?
- 21. 익명의 내부 클래스
- 22. 로컬 환경에서 HttpApplication.User.Identity.Name을 변경하는 방법은 무엇입니까?
- 23. 클래스 내부에서 구조체를 정의하는 방법은 무엇입니까?
- 24. 클래스 내부에서 jar 파일을 실행하는 방법은 무엇입니까?
- 25. 클래스 내부에서 메서드를 장식하는 방법은 무엇입니까?
- 26. 클래스 내부에서 VBA 오류를 처리하는 방법은 무엇입니까?
- 27. 클래스 내부에서 외부 함수를 호출하는 방법은 무엇입니까?
- 28. 클래스 내부에서 배열에 액세스하여 수정하는 방법은 무엇입니까?
- 29. 클래스 내부에서 생성자를 호출하는 방법은 무엇입니까?
- 30. UIPageViewControllerOptionInterPageSpacingKey 값을 변경하는 방법은 무엇입니까?
수퍼를 호출 할 수 있습니다. – DrRoach
내부 클래스 내부에서는 비 최종 로컬 변수를 사용할 수 있지만 외부 클래스에서 발생한 로컬 변수는 사용할 수 없습니다. – Smutje
로컬 변수가 아닌 최종 변수 인 경우 메서드의 끝에서 소멸되므로 내부 클래스 내부에서 어떻게 액세스 할 수 있습니까? 마지막으로 만들거나 인스턴스 변수를 사용하여 범위를 늘리십시오. – Braj