[英]Java check if Interface implementation is an object of particular implementation
我正在使用Spring Boot自動連接泛型類型列表。
處理器是一個接口,其所有實現均已自動接線。
我需要該接口的特定實現,為此,我正在使用一種方法,該方法將采用Implementation類類型,並返回自動裝配的相應的Implementation。
@Autowired
private List<Processor> processorsList; //Autowiring all implementation of Processor
// Return an autowired instance of a particular implementation
private Processor getProcessor(Class<? extends Processor> cls) {
for (Processor p: processorsList)
if (p instanceof cls) // getting compilation error here
return p;
return null;
}
我在這里遇到編譯錯誤:未知類:cls
如何解決這個問題,或者有更好的方式做我在做的事情?
動態等效於instanceOf
沒有編譯錯誤: Class.isInstance(Object object)
@Autowired
private List<Processor> processorsList; //Autowiring all implementation of Processor
// Return an autowired instance of a particular implementation
private Processor getProcessor(Class<? extends Processor> cls) {
for (Processor p: processorsList)
if (cls.isInstance(p)) return p;
return null;
}
當心潛在的NPE
正如您可以單擊此鏈接一樣,它完全限制了使用instanceOf [不能對參數化類型使用Casts或instanceof)
因為Java編譯器會擦除通用代碼中的所有類型參數,所以您無法驗證運行時正在使用通用類型的哪個參數化類型: https : //docs.oracle.com/javase/tutorial/java/generics/restrictions.html#無法投射
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.