簡體   English   中英

從實現中捕獲通用類型

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

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