Maison  >  Article  >  Java  >  Dans quels scénarios les classes internes anonymes Java ne conviennent-elles pas ?

Dans quels scénarios les classes internes anonymes Java ne conviennent-elles pas ?

WBOY
WBOYoriginal
2024-05-03 17:42:021146parcourir

Les situations dans lesquelles les classes internes anonymes ne conviennent pas incluent : besoin d'accéder à des membres privés, besoin de plusieurs instances, besoin d'hériter, besoin d'accéder à des types génériques

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

Scénarios dans lesquels les classes internes anonymes Java ne conviennent pas à l'utilisation

Les classes internes anonymes sont un moyen pratique de créer des classes internes qui peuvent être utilisées pour créer rapidement une classe qui implémente une interface ou étend une classe si nécessaire. Cependant, il existe certaines situations dans lesquelles il n'est pas approprié d'utiliser des classes internes anonymes :

1 Nécessité d'accéder aux membres privés de la classe externe

Les classes internes anonymes ne peuvent pas accéder aux membres privés de la classe externe, ce qui peut limiter. leur utilisation dans certaines situations est utile. Par exemple, si vous devez accéder à des champs privés ou à des méthodes d'une classe externe à partir d'une classe interne anonyme, vous devez promouvoir les droits d'accès de ces membres en protégés ou publics, ce qui peut violer le principe d'encapsulation.

2. Plusieurs instances requises

Les classes internes anonymes sont généralement des singletons, ce qui signifie qu'une seule instance de la classe peut être créée. Cela constituerait une limitation si plusieurs instances de la classe interne anonyme doivent être créées.

3. Héritage requis

Les classes internes anonymes ne peuvent pas hériter d'autres classes, ce qui peut limiter leur flexibilité dans certaines situations. Par exemple, si vous devez créer une classe interne anonyme qui hérite d’une autre classe, cela ne sera pas possible.

4. Besoin d'accéder aux types génériques

Les classes internes anonymes ne peuvent pas accéder aux paramètres de type génériques des classes externes. Si vous devez accéder aux paramètres de type générique de la classe externe à partir d'une classe interne anonyme, vous devez spécifier explicitement ces paramètres en tant que paramètres de type.

Cas pratique :

Considérons l'exemple suivant :

// 外部类
public class OuterClass {

    private int privateField;

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

Dans ce cas, la classe interne anonyme ne peut pas accéder aux champs privés de la classe externe privateField, donc la classe interne anonyme n'est pas adaptée à l'utilisation.

Alternatives suggérées :

Dans le cas ci-dessus, vous pouvez utiliser des classes internes nommées ou des classes internes statiques comme alternative aux classes internes anonymes. Cela permettra l'accès aux membres privés de la classe externe et la possibilité de créer plusieurs instances.

// 外部类
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();
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn