내부 클래스가 Java에서 외부 클래스를 사용하지 않는 것에 어떤 문제가 있습니까?

StackOverflow https://stackoverflow.com/questions/1132930

  •  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;
    }
  }
}

외부 클래스를 언급하지 않으면 정규 클래스 일 수도 있습니다. 외부 클래스에 의존하지 않기 때문에 스스로 설 수 있습니다. 나는 그것이 "오류"의 이유라고 생각합니다.

비 정적 내부 클래스는 외부 클래스의 인스턴스를 암시 적으로 참조합니다. 이 숨겨진 참조는 외부 클래스에서 쓰레기 수집을 지연 시키거나 방지 할 수 있으며 직렬화 문제를 야기 할 수 있습니다. 따라서 필요할 때는 비 정적 내부 클래스 만 사용해야합니다. 클래스 정적을 선언하는 것을 잊기 쉽기 때문에 코드 분석은 필요하지 않은 경우 경고합니다.

내부 클래스의 요점은 외부 클래스에 액세스 할 수 있다는 것입니다. 당신이 실제로 아니라면 사용 외부 클래스는 규칙적이고 본격적인 클래스로 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top