2로 무엇을하고 있는지 알 수 있습니다. 클래스를 패키지로 사용하고 패키지로 패키지로 사용하므로 패키지 내에서 자신을 격리 할 수는 있지만 클래스를 사용하여 패키지 내에서 구성 할 수 있습니다.
매우 영리합니다. 영리한 것을 조심하십시오.
이렇게하면 동일한 소스 파일에서 여러 클래스를 멈출 수 있으며 (원하는 경우) 경로에 대문자가 추가됩니다.
또한 리플렉션을 사용하여 외부에서 침입하는 경우가 아니면 패키지 내에 테스트 코드를 작성해야합니다.
그 외에는 이것이 작동합니다. 이상하게 보일 것입니다.
사람들은 Hashtable의 EntrySet 과 같이 사용되는 내부 클래스에 더 익숙합니다 . 그것은 비공개이므로 만들 수는 없지만 공용 인터페이스를 구현하므로 인터페이스를 통해 대화하고 무언가를 얻을 수 있습니다.
그러나 인터페이스를 통해서도 대화하고 싶지 않은 클래스를 설명하고 있습니다. 그래서 나를위한 인터페이스가 없습니다. 이것은 (당신이 나에게 소스를 제공하지 않는 한)보고 혼란 스러울 것이 없다는 것을 의미합니다.
내가 예상하는 가장 큰 문제는 API를 유지 관리하는 혼란스러운 초보자입니다. 당신은 그들에게 문서와 의견을 던질 수 있지만 어느 쪽이든 읽거나 믿지 않을 때는 대체되지 않습니다.
언어 부족을 보완하는 또 다른 패턴을 만들었습니다. Java에는 패키지 그룹에 대한 액세스 권한을 부여하는 액세스 수정자가 없습니다. "모듈"액세스 수정자가 제안되었다고 들었지만 그 징후는 보이지 않습니다.
상속을 통해 몰래 들어가는 것을 신경 쓰지 않으면 기본 액세스 수정 자 (수정 자 없음)가 여기에서 사용됩니다.이 경우 보호됩니다.
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
실제로 원하는 것은 모듈 액세스입니다. 그렇게하면 테스트를 한 패키지에 보관하고 다른 패키지에 코드를 보관할 수 있습니다. 슬프게도 우리는 Java로 가지고 있지 않습니다.
대부분의 사람들은 1을하고 API를 확장합니다. 인터페이스를 올바르게 사용하면 구현에 대한 부담이 줄어 듭니다.
1로 원하는 것을 해킹하는 것은 훨씬 더 나쁘다. 호출 스택을 들여다보고 전화를 한 것이 마음에 들지 않는 패키지에서 나올 때마다 예외를 던집니다. 아이유