2014-09-13 2 views
1

내 문제는 말로 설명하기가 어렵 기 때문에 간단히 설명하고 내가하는 말을 이해하기를 바랍니다. :)공개를 사용하지 않고 다른 패키지의 보호 된 클래스 변수에 액세스

동일한 프로젝트의 내부 패키지에있는 클래스 내에서 보호되고 최종 변수 인 com.example.Main (com.example.package.SomeClass.thisVarHere)에 액세스하려고합니다.

package com.example; 
import some.package.Here; 
import another.package.Here; 
static import com.example.package.InsideClass.statVar; 

public class MainClass { 
    public void someMethod() { 
     System.out.println("Value of statVar is: " + statVar); 
    } 
} 

그리고 다른 클래스 :

package com.example.package; 
import pa.cka.ge 

public class InsideClass { 
    protected static String statVar = "Test variable"; 
} 

내가 statVar에 액세스하려고, 그것을 보호 이후, 나는 그것을 액세스 할 수 없음을 알려줍니다 여기에 내가 뭘하는지의 예입니다 (내가 예상했던대로). 하지만 다른 사람들이 액세스 할 수 있도록 공개 설정하지 않기를 바랍니다. 또한 을 내부 패키지에 포함하므로 내부 클래스도 작동하지 않습니다. 이 일을 성취 할 수있는 방법조차 없습니까? 아니면 공개적으로 설정해야하며 외부의 당사자가 액세스하지 않기를 바랍니다. 어떤 제안이라도 대단히 감사하겠습니다. :) 고맙습니다!

+1

공개 결승이 최선입니다. '내부 패키지'에 대한 귀하의 아이디어는 자바 패키지가 작동하는 방식에 대한 오해입니다. com.example과 com.example.package 사이에는 아무런 관련이 없습니다. 자신의 조직 이외에는 –

+0

@MikeK입니다. 아, 알아. 이제는 생각해 보았습니다. 고마워, 그리고 환호. – kkirigaya

+0

은 같은 프로젝트 내의 'com.example.package'이거나 외부 라이브러리입니까? –

답변

1

다른 패키지에서 액세스하려고하므로 그렇게 생각하지 않습니다. Java에서 패키지 P1의 클래스에 대해 "여기에 패키지의 클래스에 액세스 권한을 부여하고 다른 외부 패키지는 없도록하려는 변수가 있습니다."라고 말할 방법이 없습니다. 하나의 외부 패키지에 대한 액세스 권한을 부여하면 모든 패키지에 대한 액세스 권한이 부여됩니다. 어쩌면 호출자가 어떤 패키지인지보기 위해 스택 백 트레이스 (backtrace)를 보는 getter 함수로 이것을 수행 할 수 있습니다.하지만 과도한 것 같습니다. 대답은 아마 디자인을 다시 생각하는 것입니다.

+0

@kkirigaya 부적절하지 않음 - 방금 내가 대답을하고 싶다는 생각을 바 꾸었습니다. – ajb

관련 문제