簡體   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