2016-08-11 5 views
0

Ich möchte eine Klasse wie "android.view.View" erstellen, eine Klasse, die angezeigt wird "Es gibt keinen Standardkonstruktor in 'android.view.View'" Fehler, wenn super (...) wird nicht in der Klasse genannt, die meine Klasse erweitert, tut mir leid für mein schlechtes Englisch, kann mir da jemand helfen?So erstellen Sie eine Klasse ohne Standardkonstruktor

dank

--edit

@Eran, danke, Ihr Kommentar gibt mir einen Hinweis, so ist der Täter Lombok Anmerkung „@ data“, es keinen Fehler gibt auch ich einen Konstruktor mit Parametern erstellen, eine Ahnung, wie um dies mit Lombok zu erreichen?

+1

Erstellen Sie eine Klasse einen Konstruktor mit Parametern. – Eran

+0

Fügen Sie Ihrer Klasse einfach einen Konstruktor mit mindestens einem Parameter hinzu. Der Compiler fügt nur dann einen Standardkonstruktor hinzu, wenn Sie selbst keinen Konstruktor in der Klasse definieren. – Jesper

+0

@Eran, danke, dein Kommentar gibt mir einen Hinweis, so ist der Schuldige Lombok Annotation "@Data", es gibt keinen Fehler, auch wenn ich einen Konstruktor mit Parameter, eine Idee, wie man dies mit Lombok erreichen? – g03r03

Antwort

0

Ich stelle nur den privaten Konstruktor:

public class MyClass{ 
    private String text; 
    private int number; 

    private MyClass(){ 
     this.text="hi"; 
    } 

    public MyClass(int number){ 
     this(); 
     this.number = number 
    } 
    ... 
} 

Auf diese Weise sollte das nicht Standardkonstruktors Kind-Klassen verwenden

public class MyClass { 
    private MyClass() { 
     throw new UnsupportedOperationException(); 
    } 
} 
+0

Dies ist die beste Antwort für jetzt, diese Show Ausnahme nur zur Laufzeit, nicht getestet, aber ich möchte den Fehler vor der Kompilierung, wenn möglich zu erzeugen – g03r03

0

Hier ist Ihr Hauptklassenmuster.

public class MyParentClass { 

    MyParentClass(int value) { 

    } 
} 

Wenn eine Klasse wollen, sie zu verlängern, ohne super(value) Aufruf wird bekommen "Es gibt keinen Standard contructor in parent_class_name verfügbar"

wie unten wie:

public class ChildClass extends MyParentClass { 

} 
+0

Ja, das ist, wie ich meine Klasse erstellt habe, dachte ich, ich mache Fehler, aber dann erkannte ich schließlich, diese Klasse keinen Fehler erzeugen, wenn ich "@Data" Annotation von Lombok öffentlichen @Data Klasse verwenden ChildClass erweitert MyParentClass { } – g03r03

1

Sie können es machen privat, also können andere Klassen es nicht benutzen.

public MyChildClass1 extends MyClass{ 
    //NO COMPILE: No default constructor available in MyClass 
} 

public MyChildClass2 extends MyClass{ 
    public MyChildClass2(){ 
     //NO COMPILE: No default constructor available in MyClass 
    } 
} 

public MyChildClass3 extends MyClass{ 
    public MyChildClass3(){ 
     super(); //NO COMPILE: MyClass() has private access 
    } 
} 

public MyChildClass4 extends MyClass{ 
    public MyChildClass4(){ 
     super(2); //It Works! (it will initialize number=2 and text="hi") 
    } 
} 
+0

wie ein privates Feld Kindklasse zwingen kann, mindestens einen Super (..) zu verwenden? – g03r03

+0

@ g03r03 Ich bin mir nicht sicher, ob ich deinen Kommentar verstanden habe. Ich habe die Antwort mit dem, was ich denke, dass du fragst, aktualisiert. – debus

Verwandte Themen