我有A类
class A{}
A1类扩展了A类
class A1 extends A{}
现在在B类中,我想将任何扩展A类的类作为变量传递。
class B{
Class<? extends A> variable;
public B(Class<? extends A> variable) {
this.variable = variable;
}
}
要在上面运行,驱动程序类如下
class C {
public static void main(String args[]) {
B b=new B(new A());// A cannot be converted to Class<? extends A>.
B b=new B(new A1());// A1 cannot be converted to Class<? extends A>.
}
}
因为Class<? extends A> variable
意味着,任何扩展类A的类都可以在构造函数中传递,而A1扩展A,那么为什么会给出错误?
我想念什么?
答案 0 :(得分:5)
我怀疑您实际上想做的是设置B
,使其可以与A
的 instances 或{{1}的任何子类型一起使用}。为此,您需要使类A
本身是通用的:
B
答案 1 :(得分:3)
Class<? extends A> variable
意味着variable
可以保存对Class
类型的对象的引用,而不是对扩展A
的对象的引用。
Class
是“元类”,其目的是描述另一个类。从Class
实例中,您可以获取此类提供的所有字段和所有方法。您可以查看Java reflection教程以了解更多信息。
要使代码正常工作,您可以编写如下代码:
class B<T extends A> {
private T variable;
public B(T variable) {
this.variable = variable;
}
}
class C {
public static void main(String args[]) {
B<A> b = new B<>(new A());
B<A1> b1 = new B<>(new A1());
}
}
通过这种方式,您将创建一个通用类B
,该类可以接受A
的实例或扩展了A
的内容
答案 2 :(得分:1)
相反,可行的是:
B b = new B(A.class); // class type expected and not the instance of
或
B b = new B(A1.class);
为进一步说明,参数Class<? extends A> variable
表示<? extends A>
是由提供的Class
对象建模的类的类型。因此,您需要提供A
类或任何扩展A
但类型为Class
的类。