내부 클래스가 Java에서 외부 클래스를 사용하지 않는 것에 어떤 문제가 있습니까?
-
16-09-2019 - |
문제
Eclipse에서 정적 분석기를 사용하여 코드를 검사합니다. 한 수업 인 Foo에는 내부 수업 인 바가 있습니다. 다음 오류가 발생합니다.
JAVA0043 Inner class 'bar' does not use outer class 'foo'
이것이 왜 오류입니까? 외부 클래스가 내부 클래스를 사용하는 한이 정보를 숨기는 데 충분하지 않습니까?
내부 클래스는 정적이 아닙니다.
해결책
내부 클래스를 외부 클래스에서만 사용할 수 있지만 내부 클래스는 외부 클래스에 대한 언급이 필요하지 않으면 만들 수 있습니다. private static
.
내면의 클래스가 외부 클래스 이외의 다른 사람에게 알려져 있다면, 그 자체로 최상위 클래스 일 수도 있습니다.
다른 팁
비슷한 것 같습니다 에너지 오류:
// Incorrect
class Log {
// Position never uses the enclosing Log instance,
// so it should be static
class Position {
private int line;
private int column;
Position(int line, int column) {
this.line = line;
this.column = column;
}
}
}
외부 클래스의 인스턴스 변수 또는 메소드를 사용하지 않는 중첩 클래스 정적으로 선언 할 수 있습니다.
이렇게하면 두 클래스 간의 종속성이 줄어들어 가독성과 유지 보수가 향상됩니다.
// Correct
class Log {
static class Position {
private int line;
private int column;
Position(int line, int column) {
this.line = line;
this.column = column;
}
}
}
외부 클래스를 언급하지 않으면 정규 클래스 일 수도 있습니다. 외부 클래스에 의존하지 않기 때문에 스스로 설 수 있습니다. 나는 그것이 "오류"의 이유라고 생각합니다.
비 정적 내부 클래스는 외부 클래스의 인스턴스를 암시 적으로 참조합니다. 이 숨겨진 참조는 외부 클래스에서 쓰레기 수집을 지연 시키거나 방지 할 수 있으며 직렬화 문제를 야기 할 수 있습니다. 따라서 필요할 때는 비 정적 내부 클래스 만 사용해야합니다. 클래스 정적을 선언하는 것을 잊기 쉽기 때문에 코드 분석은 필요하지 않은 경우 경고합니다.
내부 클래스의 요점은 외부 클래스에 액세스 할 수 있다는 것입니다. 당신이 실제로 아니라면 사용 외부 클래스는 규칙적이고 본격적인 클래스로 만듭니다.