Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java抽象类,抽象构造函数_Java - Fatal编程技术网

Java抽象类,抽象构造函数

Java抽象类,抽象构造函数,java,Java,我试图找到一种方法来强制将实现一个接口或将扩展一个类的用户创建几个构造函数。我认为这样做的一种方法是在抽象类中创建一个抽象构造函数,但我发现我不能这样做 我如何解决这个问题?是否有某种方法可以强制用户创建特定的构造函数 谢谢 没有 但是,您可以构建一个利用反射的单元测试框架,以确保存在正确的构造函数。否。 但是,由于构造函数通常被factorymethods替代,因此您可以实现抽象factorymethods或其他模式,如builderpattern。您不能创建抽象的构造函数,但这里有一个解决方

我试图找到一种方法来强制将实现一个接口或将扩展一个类的用户创建几个构造函数。我认为这样做的一种方法是在抽象类中创建一个抽象构造函数,但我发现我不能这样做

我如何解决这个问题?是否有某种方法可以强制用户创建特定的构造函数

谢谢

没有

但是,您可以构建一个利用反射的单元测试框架,以确保存在正确的构造函数。

否。
但是,由于构造函数通常被factorymethods替代,因此您可以实现抽象factorymethods或其他模式,如builderpattern。

您不能创建
抽象的
构造函数,但这里有一个解决方法,您可以做:

使用希望用户实现的所有构造函数实现一个
抽象类。在每一个类中,都有一条语句引用该类中的
抽象
方法,该方法的实现将在子类中。这样,您将通过抽象方法实现强制用户为构造函数提供一个主体。例如:

public abstract class MyAbstractClass {
    public MyAbstractClass(int param) {
        method1(param);
    }

    public MyAbstractClass(int param, int anotherParam) {
        method2(param, anotherParam);
    }

    protected abstract void method1(int param);

    protected abstract void method2(int param, int anotherParam);
}
在实现中,您将被迫提供这两种方法的实现,这两种方法可以表示两个构造函数的主体:

public class MyClass extends MyAbstractClass {
    public MyClass(int param) {
        super(param);
    }

    public MyClass(int param, int anotherParam) {
        super(param, anotherParam);
    }

    public void method1(int param) {
        //do something with the parameter
    }

    public void method2(int param, int anotherParam) {
        //do something with the parameters 
    }
}

谢谢,我最好在类实现的接口中实现一个名为newInstance的方法。您希望实现什么构造函数(为什么)?一个空构造函数和一个副本构造函数。然而,我提出这个问题是因为我想知道一个通用的方法。然而,简单的工厂方法被证明是一个更好的主意。