[英]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.