簡體   English   中英

Java檢查Interface實現是否是特定實現的對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM