簡體   English   中英

Java-如何傳入類型Class <A<B> &gt;到方法

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

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