简体   繁体   English

如何在没有默认构造函数的情况下创建类

[英]How to create class with no default constructor

I want to create a class like "android.view.View", a class that will show "There is no default constructor available in 'android.view.View'" error if super(...) is not called in class that extend my class, sorry for my bad english, is there anyone can help me? 我想创建一个类似“ android.view.View”的类,该类将显示“在android.view.View中没有默认构造函数”错误,如果在类中未调用super(...)延长我的课,对不起我的英语不好,有人可以帮助我吗? thanks 谢谢

--edit - 编辑

@Eran, thanks, your comment gives me a hint, so the culprit is Lombok annotation "@Data", it gives no error even I create a constructor with parameter, any idea how to achieve this with Lombok? @Eran,谢谢,您的评论给了我一个提示,所以罪魁祸首是Lombok注释“ @Data”,即使我创建了带参数的构造函数,也不会出错,任何想法如何使用Lombok来实现?

You can make it private so other classes can't use it. 您可以将其设为私有,以便其他类不能使用它。

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

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

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

In this way, child classes should use the non default constructor: 这样,子类应使用非默认构造函数:

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")
    }
}

Here is your main class pattern. 这是您的主班模式。

public class MyParentClass {

    MyParentClass(int value) {

    }
}

If any class want to extend it without calling super(value) will get "There is no default contructor available in parent_class_name" 如果任何类想要扩展它而不调用super(value)将得到“ parent_class_name中没有默认构造函数”

Like as below: 如下图所示:

public class ChildClass extends MyParentClass {

}

I just provide the private constructor: 我只提供私有构造函数:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM