Java에서 C 'Friend' 개념을 복제할 수 있나요?
Java에서는 일반적으로 하나의 패키지에 클래스를 담는 것이 불가능합니다. 다른 패키지에 있는 클래스의 비공개 멤버에 액세스합니다. 그러나 이 동작을 시뮬레이션하는 데 사용할 수 있는 트릭이 있습니다.
트릭
이 트릭에는 개인 생성자와 함께 중첩 클래스를 사용하는 것이 포함됩니다. 이 중첩 클래스는 액세스를 제한하려는 메서드에 대한 "서명 보안" 역할을 합니다. 예는 다음과 같습니다.
// Package: capulet public class Juliet { public static void cuddle(Romeo.Love love) { // Check that the love is real (null check) Objects.requireNonNull(love); // Call the cuddle method System.out.println("O Romeo, Romeo, wherefore art thou Romeo?"); } }
// Package: montague public class Romeo { // Nested class with private constructor public static final class Love { private Love() {} } // Static reference to the love class private static final Love love = new Love(); // Public method to cuddle Juliet using the nested class public static void cuddleJuliet() { Juliet.cuddle(love); } }
이 예에서 Romeo.Love 클래스는 Romeo 클래스 내에 중첩되어 있으며 전용 생성자를 갖습니다. 이는 다른 클래스가 Romeo.Love의 인스턴스를 생성할 수 없음을 의미합니다. Juliet 클래스에는 Romeo.Love의 인스턴스를 매개변수로 취하는 cuddle이라는 공개 메소드가 있습니다.
Romeo 클래스만이 Romeo.Love의 인스턴스를 생성할 수 있으므로 Romeo 클래스만이 cuddle 메소드를 호출할 수 있습니다. 이는 Cuddle 메소드에 대한 접근을 Romeo 클래스로 효과적으로 제한하여 C 친구 개념의 동작을 시뮬레이션합니다.
위 내용은 Java가 C 'Friend' 개념을 복제할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!