Heim >Java >javaLernprogramm >Warum können Sie in Java vor Version 16 keine statische Methode in einer nichtstatischen inneren Klasse definieren?

Warum können Sie in Java vor Version 16 keine statische Methode in einer nichtstatischen inneren Klasse definieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 04:43:30813Durchsuche

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

Statische Methoden in nicht-statischen inneren Klassen vor Java 16

Problem

In Versionen vor Java 16 wurde versucht, eine statische Methode zu definieren innerhalb einer nicht statischen inneren Klasse führt zu einem Compilerfehler. Beispielsweise schlägt das folgende Codefragment fehl:

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

Erläuterung

Nicht statische innere Klassen sind an Instanzen ihrer umschließenden Klasse gebunden. Jede Instanz der inneren Klasse hat einen versteckten Verweis auf die umschließende Klasseninstanz. Das bedeutet, dass statische Methoden innerhalb der inneren Klasse einen Verweis auf die umschließende Klasse aufrechterhalten müssten, was gegen das Prinzip der Schnittstellenisolation verstößt.

Lösung

Um statische Methoden innerhalb einer inneren Klasse zu definieren, müssen Sie muss die innere Klasse als statisch deklarieren. Eine statische innere Klasse hat keinen impliziten Verweis auf die Instanz ihrer umschließenden Klasse. Dadurch können statische Methoden definiert werden:

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

Das obige ist der detaillierte Inhalt vonWarum können Sie in Java vor Version 16 keine statische Methode in einer nichtstatischen inneren Klasse definieren?. 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