>Java >java지도 시간 >Java 익명 내부 클래스는 어떤 시나리오에서 사용하기에 적합하지 않습니까?

Java 익명 내부 클래스는 어떤 시나리오에서 사용하기에 적합하지 않습니까?

WBOY
WBOY원래의
2024-05-03 17:42:021211검색

익명 내부 클래스가 사용하기에 적합하지 않은 상황은 다음과 같습니다: 프라이빗 멤버에 액세스해야 함, 여러 인스턴스가 필요함, 상속해야 함, 제네릭 유형에 액세스해야 함

Java 匿名内部类在哪些场景下不适合使用?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.