如何在没有默认构造函数的情况下创建 class
How to create class with no default constructor
我想创建一个类似于 "android.view.View" 的 class,一个 class 如果在 class 扩展了我的 class,抱歉我的英语不好,有没有人可以帮助我?谢谢
--编辑
@Eran,谢谢,你的评论给了我一个提示,所以罪魁祸首是 Lombok 注释“@Data”,即使我创建一个带参数的构造函数,它也没有给出错误,知道如何用 Lombok 实现这个吗?
这是您的主要 class 模式。
public class MyParentClass {
MyParentClass(int value) {
}
}
如果任何 class 想要扩展它而不调用 super(value)
将得到 "There is no default contructor available in parent_class_name"
如下:
public class ChildClass extends MyParentClass {
}
您可以将其设为私有,这样其他 类 就无法使用它。
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")
}
}
我只提供私有构造器:
public class MyClass {
private MyClass() {
throw new UnsupportedOperationException();
}
}
我想创建一个类似于 "android.view.View" 的 class,一个 class 如果在 class 扩展了我的 class,抱歉我的英语不好,有没有人可以帮助我?谢谢
--编辑
@Eran,谢谢,你的评论给了我一个提示,所以罪魁祸首是 Lombok 注释“@Data”,即使我创建一个带参数的构造函数,它也没有给出错误,知道如何用 Lombok 实现这个吗?
这是您的主要 class 模式。
public class MyParentClass {
MyParentClass(int value) {
}
}
如果任何 class 想要扩展它而不调用 super(value)
将得到 "There is no default contructor available in parent_class_name"
如下:
public class ChildClass extends MyParentClass {
}
您可以将其设为私有,这样其他 类 就无法使用它。
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")
}
}
我只提供私有构造器:
public class MyClass {
private MyClass() {
throw new UnsupportedOperationException();
}
}