private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
생성자 Foo()는 잠재적으로 여러 스레드에서 호출 될 수 있습니다. 내 관심사는 개인 정적 필드 '콜백'및 정적 메서드 'getCallback()'입니다.다음 코드를 검토하면 도움이 될까요?
'getCallback()'이 호출 될 때마다 정적 필드 '콜백'에 새 값을 할당합니다.
내 추측 키워드 정적는 항상 클래스가 아니라 인스턴스에 연결되어 있기 때문에, 그래서 수단을 스레드로부터 안전하지 않습니다 즉, 푸의 정적 필드 '콜백'는 잠재적으로 다른 덮어 쓰기 가능 스레드는 다른 Foo()를 생성합니다. 이 올바른지?
내가 잘못하면 저를 교정하십시오. 감사!
편집 : 의도는 클래스의 어딘가에 '콜백'을 유지하는 것이므로 나중에 다시 사용할 수 있습니다. 그러나 Foo는 '콜백'을 전달하는 생성자가있는 클래스에서 확장되므로 전달하기가 쉽지 않습니다.
좋은 질문입니다. 이러한 문제는 논리적으로 스스로 생각하기가 어렵습니다. –
컴파일되지 않습니다. actionCallback은 어디에서 왔는가? 일반적으로, 혼란을 원하지 않는 한 생성자를 통해 정적 필드를 초기화하지 마십시오. –
죄송합니다. 'actionCallback'이 (가) '콜백'이었습니다. 내 의도는 클래스의 어딘가에서 '콜백'을 유지하는 것이므로 나중에 다시 사용할 수 있습니다. 그러나 Foo는 '콜백'을 전달하는 생성자가있는 클래스에서 확장되므로 전달하기가 쉽지 않습니다. – His