Java 跨子类的标准化构造函数?
我有一个抽象类AbstractClass和两个扩展它的非抽象类:A和B。A和B都有接受字符串参数的构造函数。我也有一种方法,在课堂上你不能接受。没有办法要求构造函数具有任何参数Java 跨子类的标准化构造函数?,java,abstract-class,Java,Abstract Class,我有一个抽象类AbstractClass和两个扩展它的非抽象类:A和B。A和B都有接受字符串参数的构造函数。我也有一种方法,在课堂上你不能接受。没有办法要求构造函数具有任何参数 但是,您传递了一个函数您不能传递。没有办法要求构造函数具有任何参数 然而,你通过了一个你不能通过的函数。没有办法要求,你不能。没有办法要求它。这种方法也有助于减少反射样板的数量,就像你可以说A::new而不是checked Exception一样。它也在编译时检查,而不是在运行时检查。这种方法也有助于减少反射样板的数量,
但是,您传递了一个函数您不能传递。没有办法要求构造函数具有任何参数
然而,你通过了一个你不能通过的函数。没有办法要求,你不能。没有办法要求它。这种方法也有助于减少反射样板的数量,就像你可以说A::new而不是checked Exception一样。它也在编译时检查,而不是在运行时检查。这种方法也有助于减少反射样板的数量,正如您可以说A::new没有检查异常。它也在编译时检查,而不是在运行时检查。
public abstract class AbstractClass {
// do stuff
}
public class A extends AbstractClass {
public A(String str) {
// do stuff
}
}
public class B extends AbstractClass {
public B(String str) {
// do stuff
}
}
// this is stuff in other places
public void instantiateClass(Class<? extends AbstractClass> obj) {
AbstractClass object = obj.newInstance("blah"); // Error: Expected 0 arguments but found 1
// do stuff
}
instantiateClass(A.class);
instantiateClass(B.class);
public void instantiateClass(Function<? super String, ? extends AbstractClass> fn) {
AbstractClass object = fn.apply("blah");
// do stuff
}
instantiateClass(A::new);
instantiateClass(B::new);
public class C extends AbstractClass {
public C() {
// do stuff
}
}