繁体   English   中英

在java中传递Class对象

[英]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>可以接受所有ITemplateITemplate作为超类的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM