如何在Java中强制使用构造函数

时间:2015-08-19 12:38:04

标签: java oop inheritance multiple-inheritance

有没有办法在Java类中强制执行特定的构造函数?

例如,我希望从类继承的所有类都具有类似 -

的构造函数
public classname(string s1,string s2){....}

我知道不应该避免它,因为它可能导致多重继承问题。但无论如何还有办法吗?

3 个答案:

答案 0 :(得分:4)

Java中没有任何工具可以直接执行此操作。

但是,可以通过abstract方法在某种程度上强制执行。

abstract class Base {

    Base(String s1, String s2) {
        init(s1, s2);
    }

    protected abstract void init(String s1, String s2);
}

class MyClass extends Base {

    // Forced to do this.
    MyClass() {
        super("One", "Two");
    }

    // Forced to do this.
    @Override
    protected void init(String s1, String s2) {
    }

}

答案 1 :(得分:3)

您希望只有一个构造函数,并且具有相同的签名。 在运行时,这可能以昂贵的方式完成反射。

public BaseClass(String s, String t, int n) {
    Class<?> cl = getClass();
    do {
        check(cl);
        cl = cl.getSuperclass();
    } while (cl != BaseClass.class);
}

private void check(Class<?> cl) {
    if (cl.getConstructors().length != 1) {
        throw new IllegalStateException("Needs only 1 constructor in: " + cl.getName());
    }
    try {
        cl.getConstructor(String.class, String.class, int.class);
    } catch (NoSuchMethodException e) {
        throw new IllegalStateException("Constructor should have parameter types (String, String, int) in: " + cl.getName());
    }
}

不可取

但是,您可以使用隐藏类层次结构的工厂。或者实际上使用一个委托给你的类层次结构的类(有一个类的成员)。

答案 2 :(得分:-1)

很抱歉,但不,您不能强制类实现特定的构造函数。