익명 내부 클래스가 사용하기에 적합하지 않은 상황은 다음과 같습니다: 프라이빗 멤버에 액세스해야 함, 여러 인스턴스가 필요함, 상속해야 함, 제네릭 유형에 액세스해야 함
Java 익명 내부 클래스가 사용하기에 적합하지 않은 시나리오
익명 내부 클래스는 인터페이스를 구현하거나 필요할 때 클래스를 확장하는 클래스를 빠르게 생성하는 데 사용할 수 있는 내부 클래스를 생성하는 편리한 방법입니다. 그러나 익명 내부 클래스를 사용하는 것이 적절하지 않은 몇 가지 상황이 있습니다.
1. 외부 클래스의 비공개 멤버에 액세스해야 합니다.
익명 내부 클래스는 외부 클래스의 비공개 멤버에 액세스할 수 없으므로 제한될 수 있습니다. 어떤 상황에서는 유용하게 사용됩니다. 예를 들어 익명 내부 클래스에서 외부 클래스의 전용 필드나 메서드에 액세스해야 하는 경우 이러한 멤버의 액세스 권한을 protected 또는 public으로 승격해야 하며 이는 캡슐화 원칙을 위반할 수 있습니다.
2. 다중 인스턴스 필요
익명 내부 클래스는 일반적으로 싱글톤입니다. 즉, 클래스의 단일 인스턴스만 생성될 수 있습니다. 익명 내부 클래스의 여러 인스턴스를 생성해야 하는 경우 이는 제한 사항이 됩니다.
3. 상속이 필요합니다.
익명 내부 클래스는 다른 클래스에서 상속할 수 없으므로 특정 상황에서는 유연성이 제한될 수 있습니다. 예를 들어, 다른 클래스에서 상속되는 익명 내부 클래스를 생성해야 하는 경우 이는 불가능합니다.
4. 제네릭 유형에 액세스해야 합니다
익명 내부 클래스는 외부 클래스의 제네릭 유형 매개변수에 액세스할 수 없습니다. 익명 내부 클래스에서 외부 클래스의 일반 유형 매개변수에 액세스해야 하는 경우 이러한 매개변수를 유형 매개변수로 명시적으로 지정해야 합니다.
실용 사례:
다음 예를 고려하세요.
// 外部类 public class OuterClass { private int privateField; public void doSomething() { // 创建匿名内部类 Runnable runnable = new Runnable() { @Override public void run() { // 无法访问 privateField System.out.println(privateField); } }; } }
이 경우 익명 내부 클래스는 외부 클래스privateField
의 비공개 필드에 액세스할 수 없으므로 익명 내부 클래스는 사용하기에 적합하지 않습니다.
제안된 대안:
위의 경우 익명 내부 클래스 대신 명명된 내부 클래스 또는 정적 내부 클래스를 사용할 수 있습니다. 이를 통해 외부 클래스의 비공개 멤버에 액세스하고 여러 인스턴스를 생성할 수 있습니다.
아아아아위 내용은 Java 익명 내부 클래스는 어떤 시나리오에서 사용하기에 적합하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!