[英]Passing Class objects in java
我有一个接口和2个实现该接口的具体类,
public interface ITemplate{}
public Template implements ITemoplate {}
public Template2 implements ITemplate {}
我有一个接受Class对象并实例化它的方法。
public addTemplate(Class<ITemplate> template){
pipe.add(template.newInstance())
}
问题是,当我调用该方法时,它会抛出编译时错误:
instance.addTemplate(Template.class)
编译时错误:
addTemplate(java.package.ITemplate.class) cannot be applied to addTemplate(java.package.Template.class)
我错过了什么,或者有解决方法吗?
Class<ITemplate>
将严格接受ITemplate.class
Class<? extends ITemplate>
Class<? extends ITemplate>
将接受任何实现ITemplate.class
的类
试试这个方法:
// works for all classes that inherit from ITemplate.
public addTemplate(Class< ? extends ITemplate> template){
pipe.add(template.newInstance())
}
代替
// only accepts ITemplate Type Class (Strict Type).
public addTemplate(Class<ITemplate> template){
pipe.add(template.newInstance())
}
这是一个解释:当你使用Class<ITemplate>
它是一个严格类型的Itemplate
。 它永远不会采用除ITemplate
之外的任何其他类型参数,因为它仅在编译时解析。 然而Class <? extends ITemplate>
Class <? extends ITemplate>
可以接受所有ITemplate
或ITemplate
作为超类的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.