Heim  >  Artikel  >  Java  >  In welchen Szenarien sind anonyme innere Java-Klassen nicht für den Einsatz geeignet?

In welchen Szenarien sind anonyme innere Java-Klassen nicht für den Einsatz geeignet?

WBOY
WBOYOriginal
2024-05-03 17:42:021146Durchsuche

Zu den Situationen, in denen anonyme innere Klassen nicht zur Verwendung geeignet sind, gehören: Zugriff auf private Mitglieder, mehrere Instanzen erforderlich, Vererbung erforderlich, Zugriff auf generische Typen erforderlich

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

Szenarien, in denen anonyme innere Java-Klassen nicht zur Verwendung geeignet sind

Anonyme innere Klassen sind eine bequeme Möglichkeit, innere Klassen zu erstellen, mit denen schnell eine Klasse erstellt werden kann, die eine Schnittstelle implementiert oder eine Klasse bei Bedarf erweitert. Es gibt jedoch Situationen, in denen es nicht angebracht ist, anonyme innere Klassen zu verwenden:

1. Zugriff auf private Mitglieder der äußeren Klasse erforderlich.

Anonyme innere Klassen können nicht auf die privaten Mitglieder der äußeren Klasse zugreifen, was zu Einschränkungen führen kann ihre Verwendung ist in manchen Situationen nützlich. Wenn Sie beispielsweise von einer anonymen inneren Klasse aus auf private Felder oder Methoden einer äußeren Klasse zugreifen müssen, müssen Sie die Zugriffsrechte dieser Mitglieder auf „geschützt“ oder „öffentlich“ heraufstufen, was möglicherweise gegen das Kapselungsprinzip verstößt.

2. Mehrere Instanzen erforderlich

Anonyme innere Klassen sind normalerweise Singletons, was bedeutet, dass nur eine einzige Instanz der Klasse erstellt werden kann. Dies wäre eine Einschränkung, wenn mehrere Instanzen der anonymen inneren Klasse erstellt werden müssten.

3. Vererbung erforderlich

Anonyme innere Klassen können nicht von anderen Klassen erben, was ihre Flexibilität in bestimmten Situationen einschränken kann. Wenn Sie beispielsweise eine anonyme innere Klasse erstellen müssen, die von einer anderen Klasse erbt, ist dies nicht möglich.

4. Zugriff auf generische Typen erforderlich

Anonyme innere Klassen können nicht auf generische Typparameter äußerer Klassen zugreifen. Wenn Sie von einer anonymen inneren Klasse aus auf die generischen Typparameter der äußeren Klasse zugreifen müssen, müssen Sie diese Parameter explizit als Typparameter angeben.

Praktischer Fall:

Betrachten Sie das folgende Beispiel:

// 外部类
public class OuterClass {

    private int privateField;

    public void doSomething() {
        // 创建匿名内部类
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // 无法访问 privateField
                System.out.println(privateField);
            }
        };
    }
}

In diesem Fall kann die anonyme innere Klasse nicht auf die privaten Felder der äußeren Klasse zugreifen privateField, sodass die anonyme innere Klasse nicht zur Verwendung geeignet ist.

Empfohlene Alternativen:

Im obigen Fall können Sie benannte innere Klassen oder statische innere Klassen als Alternative zu anonymen inneren Klassen verwenden. Dies ermöglicht den Zugriff auf private Mitglieder der äußeren Klasse und die Möglichkeit, mehrere Instanzen zu erstellen.

// 外部类
public class OuterClass {

    private int privateField;

    public void doSomething() {
        // 创建带有名称的内部类
        class InnerClass implements Runnable {
            @Override
            public void run() {
                // 可以访问 privateField
                System.out.println(privateField);
            }
        }

        // 创建 InnerClass 的实例
        InnerClass innerClass = new InnerClass();
        innerClass.run();
    }
}

Das obige ist der detaillierte Inhalt vonIn welchen Szenarien sind anonyme innere Java-Klassen nicht für den Einsatz geeignet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn