fin*_*444 1 java abstract-class
我有一个抽象类AbstractClass和两个扩展它的非抽象类:A和B. 双方A并B有参加一个构造函数String的参数。我还有一个方法可以接收Class<? extends AbstractClass>然后创建它的新实例。我怎样才能让所有的孩子在他们的构造函数中AbstractClass都有一个String?
代码以防我在解释中不是很清楚:
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);
Run Code Online (Sandbox Code Playgroud)
你不能。没有办法要求构造函数有任何参数。
但是,您传递 aFunction<? super String, ? extends AbstractClass>而不是Class<? extends AbstractClass>: 这样,您必须提供一个接受单个String参数的东西,即使那不是专门的构造函数:
public void instantiateClass(Function<? super String, ? extends AbstractClass> fn) {
AbstractClass object = fn.apply("blah");
// do stuff
}
instantiateClass(A::new);
instantiateClass(B::new);
Run Code Online (Sandbox Code Playgroud)
如果你有一个类的构造函数不接受单个String参数:
public class C extends AbstractClass {
public C() {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
然后instantiateClass(C::new)不会编译;但instantiateClass(unused -> new C())会。
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |