2016-08-11 4 views
0

Я хочу создать класс типа «android.view.View», класс, который будет показывать «В конструкторе« android.view.View »отсутствует конструктор по умолчанию, если super (...) не называется в классе, который расширяет мой класс, извините за мой плохой английский, есть ли кто-нибудь, кто может мне помочь? благодаряКак создать класс без конструктора по умолчанию

--edit

@Eran, спасибо, ваш комментарий дает мне намек, поэтому преступник Ломбок аннотацию «@data», это не дает никакой ошибки даже создать конструктор с параметром, любой идеи, как добиться этого с Ломбоком?

+1

Создать класс, имеющий конструктор с параметрами. – Eran

+0

Просто добавьте конструктор с хотя бы одним параметром в ваш класс. Компилятор добавляет конструктор по умолчанию, если вы не определяете какой-либо конструктор самостоятельно в классе. – Jesper

+0

@Eran, спасибо, ваш комментарий дает мне подсказку, поэтому виновником является аннотация Lombok «@Data», она не дает ошибок даже при создании конструктора с параметром, любая идея, как добиться этого с помощью Lombok? – g03r03

ответ

0

Я просто предоставить частный конструктор:

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

Это лучший ответ на данный момент, это только исключение для исключения во время выполнения, но не проверено. Я хочу создать ошибку перед компиляцией, если возможно – g03r03

0

Вот ваш основной шаблон.

public class MyParentClass { 

    MyParentClass(int value) { 

    } 
} 

Если любой класс хочет продлить его без вызова super(value) получит «Существует по умолчанию застройщик не доступен в parent_class_name»

Как, как показано ниже:

public class ChildClass extends MyParentClass { 

} 
+0

Да, это то, как я создал свой класс, я думал, что совершу ошибку, но потом, наконец, понял, этот класс не производит никакой ошибки, если я использую аннотацию @Data от Lombok. public @Data class ChildClass extends MyParentClass { } – g03r03

1

Вы можете сделать это так что другие классы не могут его использовать.

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

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

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

Таким образом, дочерние классы должны использовать нон конструктор по умолчанию:

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

Как личное поле может заставить дочерний класс использовать хотя бы один супер (..)? – g03r03

+0

@ g03r03 Я не уверен, что понял ваш комментарий. Я обновил ответы на то, что, как я думаю, вы просите. – debus

Смежные вопросы