Java에서 클래스의 인터페이스에 대한 액세스 제한

Ahmed Shariff |

클래스에 대한 액세스를 제한해야하는 상황이 있습니다. 더 정교한에, 나는 두 개의 클래스, 말을 A하고 B클래스에 따라 그 C,하지만 A의 전체 인터페이스를 사용할 필요가 없습니다 C같은가 간다 B. 내가 한 것은 C두 개의 다른 인터페이스를 구현하는 것입니다. 하나 A는 액세스 할 수 있고 다른 하나는 B참조 할 수 있습니다. 내가 여기서하는 일이 맞습니까? 아니면 그냥 문서화해야합니까? 아니면 더 나은 접근 방법이 있습니까?

더 많은 컨텍스트를 제공하기 위해 플러그인 인터페이스를 허용하는 시스템을 구현하려고합니다. 그리고 누군가가 내가 원하지 않는 클래스의 일부에 액세스하는 것을 원하지 않습니다.

기대

디자인에 문제가 없습니다. 그러나 디자인의 이유는 보안이 아닌 명확한 디자인이어야합니다. 점을 감안 AB클래스에 액세스 할 수 있습니다 C(있기 때문에, 예를 들어 C그들은 단지 그들에받는 객체 캐스트 할 수 있습니다 : 그들은 전체에 전체 개체에 액세스 할 수 공개) C다음 액세스를 :

public interface IA {
    void f();
}
public interface IB {
    void g();
}
public class C implements IA, IB { 
    public void f() { ... }
    public void g() { ... }        
}
public class A {
    public void doSomething(IA anIA) {
        C aC = (C) anIA;
        aC.g(); // legal!
    }
}

이것은 당신의 프로그래머이기 때문에, 종종 문제가되지 않습니다 A, B그리고 C. 자신을 신뢰하므로 명확한 디자인이 필요하지만 보안은 필요하지 않습니다.

경우에도 C공공 및하지 AB직접 클래스를 액세스 할 수 없습니다, 그들은 여전히 반사를 사용 할 수 있습니다.

따라서 A및을 신뢰할 수없는 경우 B외부 당사자 (예 : 플러그인)에 의해 프로그래밍 되었기 때문에이 디자인을 사용할 수 없습니다. 플러그인이 액세스하기를 원하는 인터페이스 만 구현하는 객체를 보내야합니다.

public class C { 
    public void f() { ... }
    public void g() { ... } 

    public IA getAsIO() {
        return new IA() {
            public void f() {
                C.this.f();
            }
        };
    }

    public IB getAsIB() { 
        // similar
    }
}
public class A {
    public void doSomething(IA anIA) {
        C aC = (C) anIA; // illegal
        aC.g();
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

분류에서Dev

내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

분류에서Dev

세 인터페이스 Guice에 대한 한 클래스의 종속성

분류에서Dev

java에서 익명 인터페이스의 refrance에 대한 getClass ()는 클래스 이름을 제공합니다.

분류에서Dev

자식 클래스의 개인 속성에 대한 액세스

분류에서Dev

포인터 벡터에서 C ++의 슈퍼 클래스에 대한 하위 클래스 변수에 액세스

분류에서Dev

해당 클래스에 대한 포인터 벡터로 포함 된 클래스의 메서드에 액세스

분류에서Dev

Kotlin의 Adapter에서 데이터에 액세스하기위한 Java 클래스

분류에서Dev

Java-구현 클래스에 대한 인터페이스의 제한 메소드 매개 변수

분류에서Dev

Microsoft Store에 대한 액세스 제한

분류에서Dev

Policyd에 대한 액세스 제한

분류에서Dev

수업에 대한 액세스 제한

분류에서Dev

Swagger UI에 대한 액세스 제한

분류에서Dev

클래스의 비공개 멤버에 대한 액세스

분류에서Dev

C # 다른 클래스의 변수에 대한 앱 액세스?

분류에서Dev

Matlab의 클래스 객체에 대한 액세스

분류에서Dev

Web API의 클래스 액세스에 대한 예외

분류에서Dev

새 클래스 개체의 속성에 대한 액세스

분류에서Dev

클래스의 객체에 대한 액세스-thymeleaf

분류에서Dev

자식 클래스 생성자의 인터페이스 클래스 함수에 대한 함수 포인터

분류에서Dev

ArrayList의에 클래스에서 메서드에 대한 액세스를에 geting

분류에서Dev

모든 인터페이스에 대한 수퍼 클래스

분류에서Dev

Java에서 메소드 호출에 대한 액세스 제한

분류에서Dev

'Resources.h'클래스에 대한 중복 인터페이스 정의

분류에서Dev

인터페이스가있는 재귀 함수에 대한 액세스 위반

분류에서Dev

한 클래스에서 다른 클래스의 지역 변수에 액세스

분류에서Dev

Facebook 로그인으로 Wordpress 페이지에 대한 액세스 제한

분류에서Dev

다른 codeigniter에서 한 클래스의 개체에 액세스

분류에서Dev

grails 3.0에서 클래스의 비공개 멤버에 대한 액세스

Related 관련 기사

  1. 1

    내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

  2. 2

    내부 클래스 인터페이스 상수에 대한 Java 외부 클래스 액세스

  3. 3

    세 인터페이스 Guice에 대한 한 클래스의 종속성

  4. 4

    java에서 익명 인터페이스의 refrance에 대한 getClass ()는 클래스 이름을 제공합니다.

  5. 5

    자식 클래스의 개인 속성에 대한 액세스

  6. 6

    포인터 벡터에서 C ++의 슈퍼 클래스에 대한 하위 클래스 변수에 액세스

  7. 7

    해당 클래스에 대한 포인터 벡터로 포함 된 클래스의 메서드에 액세스

  8. 8

    Kotlin의 Adapter에서 데이터에 액세스하기위한 Java 클래스

  9. 9

    Java-구현 클래스에 대한 인터페이스의 제한 메소드 매개 변수

  10. 10

    Microsoft Store에 대한 액세스 제한

  11. 11

    Policyd에 대한 액세스 제한

  12. 12

    수업에 대한 액세스 제한

  13. 13

    Swagger UI에 대한 액세스 제한

  14. 14

    클래스의 비공개 멤버에 대한 액세스

  15. 15

    C # 다른 클래스의 변수에 대한 앱 액세스?

  16. 16

    Matlab의 클래스 객체에 대한 액세스

  17. 17

    Web API의 클래스 액세스에 대한 예외

  18. 18

    새 클래스 개체의 속성에 대한 액세스

  19. 19

    클래스의 객체에 대한 액세스-thymeleaf

  20. 20

    자식 클래스 생성자의 인터페이스 클래스 함수에 대한 함수 포인터

  21. 21

    ArrayList의에 클래스에서 메서드에 대한 액세스를에 geting

  22. 22

    모든 인터페이스에 대한 수퍼 클래스

  23. 23

    Java에서 메소드 호출에 대한 액세스 제한

  24. 24

    'Resources.h'클래스에 대한 중복 인터페이스 정의

  25. 25

    인터페이스가있는 재귀 함수에 대한 액세스 위반

  26. 26

    한 클래스에서 다른 클래스의 지역 변수에 액세스

  27. 27

    Facebook 로그인으로 Wordpress 페이지에 대한 액세스 제한

  28. 28

    다른 codeigniter에서 한 클래스의 개체에 액세스

  29. 29

    grails 3.0에서 클래스의 비공개 멤버에 대한 액세스

뜨겁다태그

보관