제 동료는 Eclipse 코드 포맷 및 경고 설정 중 일부를 더욱 엄격하게 만들 것을 제안했습니다. 이러한 변경 사항의 대부분은 의미가 있지만 자바에서이 이상한 경고를받습니다. "문제"를 재현 할 수있는 몇 가지 테스트 코드는 다음과 같습니다.자바의 개인 정적 중첩 클래스에 대한 합성 접근에 대한 Eclipse 경고?
package com.example.bugs;
public class WeirdInnerClassJavaWarning {
private static class InnerClass
{
public void doSomething() {}
}
final private InnerClass anInstance;
{
this.anInstance = new InnerClass(); // !!!
this.anInstance.doSomething();
}
}
// using "this.anInstance" instead of "anInstance" prevents another warning,
// Unqualified access to the field WeirdInnerClassJavaWarning.anInstance
줄이 !!!
액세스 생성자 WeirdInnerClassJavaWarning.InnerClass()를 는 합성 접근 방법으로 에뮬레이트 둘러싸에 : 나에게 나의 새로운 경고 설정 Eclipse에서이 경고를 제공합니다. 가시성을 높이면 실적이 향상됩니다.
이것은 무엇을 의미합니까? "개인 정적 클래스"를 "보호 된 정적 클래스"로 변경하면 경고 메시지가 사라지고 나에게는 의미가 없습니다.
편집 : 나는 마지막으로 "올바른"수정을 파악. 여기에서 진짜 문제는이 중첩 된 개인 정적 클래스에 공용 생성자가 누락 된 것 같습니다. 즉, 하나의 팅겨 경고 제거 :
package com.example.bugs;
public class WeirdInnerClassJavaWarning {
private static class InnerClass
{
public void doSomething() {}
public InnerClass() {}
}
final private InnerClass anInstance;
{
this.anInstance = new InnerClass();
this.anInstance.doSomething();
}
}
내가 클래스가 개인 중첩 클래스 (그래서 다른 클래스가 둘러싸는 클래스의 서브 클래스를 포함하여, 그것을 액세스 할 수 없습니다 수)되고 싶어하고 나는 그것이 고정되고 싶어 수업.
중첩 된 클래스를 개인용이 아닌 보호하는 것이 왜 "문제"를 수정하는 또 다른 방법인지 이해할 수 없지만 Eclipse의 버크/버그 일 수 있습니다.
(사과, 나는 더 명확하게 할 NestedClass 대신 InnerClass의 부르심을해야합니다.)
편집하기 전에 게시하는 중이라고 가정합니다. 어쨌든 이것은 올바른 대답 인 것처럼 보입니다. –
예, 당신과 나는 동시에 타이핑을하고있었습니다. 나는 Eclipse 경고를받는 이유를 설명하기 위해 나의 대답을 확장했다. – Eddie
+1 디 컴파일러에 대해, 나는 그런 것들이 있다는 것을 결코 알지 못했다.이 경고의 텍스트를 변경해야한다는 것을 Eclipse 용 버그를 제출해야하는 것처럼 들리므로이 경고의 의미와 해결 방법을 조금 더 분명하게 알 수 있습니다. –