有没有办法在Java类中强制执行特定的构造函数?
例如,我希望从类继承的所有类都具有类似 -
的构造函数public classname(string s1,string s2){....}
我知道不应该避免它,因为它可能导致多重继承问题。但无论如何还有办法吗?
答案 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)
很抱歉,但不,您不能强制类仅实现特定的构造函数。