ホームページ >Java >&#&チュートリアル >Java 匿名内部クラスが使用に適さないのはどのようなシナリオですか?

Java 匿名内部クラスが使用に適さないのはどのようなシナリオですか?

WBOY
WBOYオリジナル
2024-05-03 17:42:021215ブラウズ

匿名内部クラスが使用に適さない状況には、プライベート メンバーにアクセスする必要がある、複数のインスタンスが必要である、継承する必要がある、ジェネリック型にアクセスする必要があるなどがあります。

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

Java 匿名内部クラスの使用に適さないシナリオ

匿名内部クラスは、内部クラスを作成する便利な方法であり、インターフェイスを実装したり、クラスを拡張したりするクラスを迅速に作成するために使用できます。必要です。ただし、場合によっては、匿名内部クラスの使用が適さない場合があります:

1. 外部クラスのプライベート メンバーにアクセスする必要があります

匿名内部クラスはアクセスできません。外部クラス メンバーのプライベート メンバー。状況によってはその有用性が制限される可能性があります。たとえば、匿名の内部クラスから外部クラスのプライベート フィールドまたはメソッドにアクセスする必要がある場合、これらのメンバーのアクセス権を protected または public に昇格する必要がありますが、これはカプセル化の原則に違反する可能性があります。

2. 複数のインスタンスが必要です

匿名内部クラスは通常シングルトンです。つまり、クラスのインスタンスは 1 つだけ作成できます。これは、匿名内部クラスの複数のインスタンスを作成する必要がある場合の制限となります。

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 したがって、匿名内部クラスは使用には適していません。

推奨される代替方法:

上記の場合、匿名内部クラスの代わりに、名前付き内部クラスまたは静的内部クラスを使用できます。これにより、外部クラスのプライベート メンバーにアクセスできるようになり、複数のインスタンスを作成できるようになります。

rree

以上がJava 匿名内部クラスが使用に適さないのはどのようなシナリオですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。