Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter?

White_Fox

Top Contributor
Guten Abend allerseits

Folgendes: Ich habe hier einige (innere!) Klassen, die ich per Reflection instanziiere. Jede dieser Klassen hat einen Konstruktor den ich als parameterlos deklariert habe, dennoch liefert ein Constructor.getParameterCount() für jeden Konstruktor einen Wert gleich oder größer eins.

Beispiel:
Java:
public class TheClass{
    public class SampleClass{
        public SampleClass(){}
    }
    
    public void showProblem(){
        boolen foundParameterlessConstructor = false;
        for(Constructor c : SampleClass.getClass.getDeclairedConstructors()){
            if(c.getParameterCount() == 0){
                foundParameterlessConstructor = true;
            }
        }
        
        if(foundParameterlessConstructor){
            System.out.println(":)");
        }
        else{
            System.out.println(":(");
        }
    }
}

Und ich kriege stets ein 🙁.
Einen 🙂 kriege ich dagegen, wenn ich c.getParameterCount() == 1 prüfe. Weiß jemand, warum?
 
Der Grund ist, (wie @Xyz1 wahrscheinlich meinte), dass nicht-statische innere Klassen immer einen impliziten Konstruktorparameter für eine Instanz der äußeren Klasse haben. Der Compiler fügt für nicht-statische innere Klassen also bei jedem Konstruktor immer noch einen weiteren Parameter hinzu, der die Instanz der umgebenden/äußeren Klasse bekommt. Man kann also nicht-statische innere Klassen nur mit einer Instanz der äußeren Klasse instanziieren.
Für statische innere Klassen ist das nicht der Fall und der Parameter Count wäre dort 0 für sonst parameterlose Konstruktoren, wie bei normalen top-level Klassen auch.
 

Neue Themen


Zurück
Oben