2012-09-24 4 views
-1

패키지 구조가 자바로되어 있으며 아래와 같이 접근 가능해야합니다. 자바에서 패키지 접근하기

enter image description here

어떻게에만 중동 패키지에 기본이되는 패키지의 클래스에 액세스 할 수 있도록하려면? TestApp은 Interface 패키지와 직접 통신해야합니다. TestApp는 Underlying 및 Middle 패키지 클래스에 대한 정보를 얻지 않아야합니다. 그것을하는 방법? 도와주세요

+1

왜이 작업을 수행 하시겠습니까? 그것은 당신이 TestApp의 개발자를 신뢰하지 않기 때문입니까? 인터페이스를 사용할 수 있다면 "모든 패키지"를 어떻게 활용합니까? –

+0

중간 패키지 메소드는 인터페이스 패키지 – indira

+0

에서 호출해야합니다. 따라서 인터페이스 코드에는 단순한 인터페이스 이상이 있다고 가정합니다. ;)이 작업을 수행하는 것이 좋을 수도 있지만, 왜 필요한지 말하지 않았으므로 문제를 해결할 다른 방법이있을 수 있습니다. –

답변

1

같은 패키지에 TestApp와 Interface를 넣을 수 있습니다. 그런 다음 인터페이스는 메서드를 사용하여 Middle를 상속해야합니다. 그러면 Middle는 패키지로 보호 된 패키지를 사용하는 동일한 기본 패키지에 있습니다.

그것은 당신이 원하는 것을하지만, 솔직히, 나는 그렇게하는 것을 알지 못합니다. 그리고 6,7 & 8 언어는 정말 다른 일을 숨길 할 준비가되지 않은

Ceylon Language

코드 및 모듈의 단위하지만, 자바 아마 더 좋은 생각을 가지고 있습니다 ... 즉, "인터페이스 패키지"자바 인터페이스없는 가정한다 프로그래머.

+0

기본, 중간 및 인터페이스 계층은 항아리를 형성합니다. TestApp와 Interface를 하나의 패키지에 넣지 마십시오. – indira

+1

가능합니다. jar가 JVM에서 압축 해제되면 다른 디렉토리와 같은 디렉토리가됩니다. 새 TestApp를 package의 이름과 같게 만든다. 솔직히, 그것이 고객의 요구라면, 그냥 그런 식으로 작동하지 않는다고 말합니다. 코드를 사용하여 Http 요청을 숨길 수 있지만 JVM은 다른 사람 코드를 숨길 수 없습니다. –

1

불가능합니다.
클래스에 대한 패키지 액세스를 설정할 수 있지만 다른 패키지에서 호출하는 데 어려움을 겪습니다. 즉, 중간 패키지에서 기본 패키지로의 액세스는 TestApp에서 기본 패키지로의 액세스와 동일합니다.
UPD : 상속에 대한 답변을 보았지만 완전히 문제를 해결하지 못했습니다. TestApp의 기본 패키지에서 상속받을 수 있습니다. 아무것도 그로부터 멀어집니다.
UPD2 : 덧붙여서, C++에서는 friend 키워드를 요구하고 있습니다. Java에는 존재하지 않습니다.

1

Java에서 "친구"시스템을 사용하여 패키지 회원에 대한보다 세분화 된 액세스를 지정할 수 없습니다. 꾸러미 바깥에서 무언가를 볼 수있게하면 패키지 외부에있는 어떤 것도에 액세스 할 수 있습니다.

TestApp 및 인터페이스 패키지 패키지에는 공통 패키지를 사용할 수 있지만 실제로는 의미 상 올바르지 않습니다. 클라이언트를 인터페이스와 혼합해야합니다.

모듈화를 적용하려는 경우 OSGi을 사용하면 장치 내부의 특정 패키지를 "내부"로 표시 할 수 있습니다. 이러한 패키지는 클라이언트에 전혀 노출되지 않습니다 ("유선").