在Java中传递类对象

4

我有一个接口和两个具体类实现了这个接口,

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)

我有点不明白,还是有一种解决方法可以解决这个问题吗?
2个回答

8

Class<ITemplate> 严格只接受 ITemplate.class

Class<? extends ITemplate> 可以接受任何实现 ITemplate.class 的类


1
尝试这个方法:

// 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> 可以接受所有对象,这些对象要么是 ITemplate,要么具有 ITemplate 作为超类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接