[英]Capturing a Generic Type from an Implementation
在一些Java代碼中,我有一個像這樣的接口:
interface A<T> {
T produce();
compare(T x, T y);
}
我有不同的實現,例如:
class B extends A<int[]> {
int[] produce() {...}
compare(int[] x, int[] y) {...}
}
問題是如何捕獲實現特定的泛型類型。 以下內容不起作用:
A<T> a = new B();
T x = a.produce();
T y = a.produce();
a.compare(x, y);
當然,因為類型T
並不引用B
內部的內容。 (實際上,它不涉及任何內容。)
有沒有辦法讓T
捕獲B
的通用類型?
如果我能在兩行之間讀到一點,我想您要問的是如何使這部分特別通用:
T x = a.produce();
T y = a.produce();
a.compare(x, y);
答案通常是使用泛型方法“綁定”類型參數:
private static <T> void produceAndCompare(A<T> a) {
T x = a.produce();
T y = a.produce();
a.compare(x, y);
}
然后您可以這樣稱呼它:
produceAndCompare(new B());
如果需要先將其放在變量中:
A<?> a = getSomeA(); //could just return new B();
produceAndCompare(a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.