Maison >Java >javaDidacticiel >Pourquoi ne pouvez-vous pas définir une méthode statique dans une classe interne non statique en Java avant la version 16 ?

Pourquoi ne pouvez-vous pas définir une méthode statique dans une classe interne non statique en Java avant la version 16 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 04:43:30814parcourir

Why Can't You Define a Static Method in a Non-Static Inner Class in Java Prior to Version 16?

Méthodes statiques dans les classes internes non statiques antérieures à Java 16

Problème

Dans les versions antérieures à Java 16, tentative de définition d'une méthode statique au sein d’une classe interne non statique entraîne une erreur du compilateur. Par exemple, l'extrait de code suivant échouera :

<code class="java">public class Foo {
    class Bar {
        static void method() {} // Compiler error
    }
}</code>

Explication

Les classes internes non statiques sont liées aux instances de leur classe englobante. Chaque instance de la classe interne a une référence cachée à son instance de classe englobante. Cela signifie que les méthodes statiques au sein de la classe interne devraient conserver une référence à la classe englobante, ce qui viole le principe de l'interface.

Solution

Pour définir des méthodes statiques au sein d'une classe interne, vous doit déclarer la classe interne comme statique. Une classe interne statique n'a pas de référence implicite à l'instance de sa classe englobante. De ce fait, il peut définir des méthodes statiques :

<code class="java">public class Foo {
    static class Bar { // now static
        static void method() {}
    }
}</code>

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