[英]Java - How to pass in type Class<A<B>> to method
我有一種方法,例如getHystrixClass(Class<A<B>> clazz)
。 它要求傳入Class<A<B>>
輸入類型。該怎么做? 我嘗試了一些方法,但是所有方法都在編譯時失敗,如下所示,並帶有相應的錯誤消息。
放在A
班
getHystrixClass(A.class)
錯誤消息:類型為IHystrixProvider<A<B>>
的方法getHystrixClass(Class<A<B>>)
不適用於參數(Class<A>)
放在B
級
getHystrixClass(B.class)
錯誤消息:類型為IHystrixProvider<A<B>>
的方法getHystrixClass(Class<A<B>>)
IHystrixProvider<A<B>>
(Class<B>)
不適用於自變量(Class<B>)
放入A<B>
類
getHystrixClass(A<B>.class)
錯誤消息: A
不能解析為變量
創建一個虛擬對象並從中獲取類。
A<B> dummy = new A<B>();
getHystrixClass(dummy.getClass())
錯誤消息:類型為IHystrixProvider<A<B>>
的方法getHystrixClass(Class<A<B>>)
IHystrixProvider<A<B>>
(Class<capture#1-of ? extends A>)
不適用於自變量(Class<capture#1-of ? extends A>)
有什么提示嗎? 對不起,我的英語不好。
編輯:
嗨@GhostCat
界面如下圖所示
// Define by my team lead
public interface IHystrixProvider<T extends HystrixCommand, Rq> {
T getHystrixClass(Class<T> hystrixCommand);
}
/**
* @param <R> the return type
*/
public abstract class HystrixCommand<R> extends ... {
...
}
HystrixCommand.java代碼是可以從GitHub獲取的公共存儲庫
您可以使用(未經檢查的)強制轉換傳遞Class<A<B>>
<A <B A<B>
-這是必需的,因為沒有代表通用類型A<B>
Class
對象,只有一個代表原始類型A
getHystrixClass((Class<A<B>>) (Class) A.class)
這將按以下順序執行強制轉換:
Class<A> (type of A.class) -> Class -> Class<A<B>>
請注意,您首先需要將其強制轉換為原始Class
,以避免出現incompatible cast
警告。 由於原始類型( Class
)保持不變,僅類型參數發生變化,因此兩種轉換也都具有零的運行時開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.