[英]Java Generics questions for multiple type parameters
我有以下代碼:
public interface IDimension<S extends IDimension<S,T>, T extends Number> extends Comparable<S> {
T toNumber();
default T toBaseNumber() {
return toNumber();
}
S fromNumber( T units );
Class<T> numberType();
}
當我像下面那樣實現IDimension
( Implementation1
),我得到了'Type parameter 'TestBaseSample' is not within its bound; should implement 'IDimension<TestBaseSample<Float,Integer>, java.lang.Long>'
'Type parameter 'TestBaseSample' is not within its bound; should implement 'IDimension<TestBaseSample<Float,Integer>, java.lang.Long>'
錯誤:
實施1:
class TestBaseSample<Integer, Float>
implements IDimension<TestBaseSample<Float, Integer>, Long> {
}
我了解為什么“ Implementation1”會出錯,但無法理解為什么“ Implementation2”和“ Implementation3”有效嗎?
實施2:
class TestBaseSample2<Integer, Float>
implements IDimension<TestBaseSample2<Float, Float>, Long> {
}
實現3:
class TestBaseSample3<Integer, Float>
implements IDimension<TestBaseSample3<Integer, Integer>, Long> {
}
看起來您正在嘗試創建一個具體的類型,但實際上是在創建通用參數並為其指定Java類的名稱。
如果我們將通用參數更改為T和S,請考慮您的第一個示例TestBaseSample2
class TestBaseSample2<T, S>
implements IDimension<TestBaseSample2<S, S>, Long> {
}
現在,只要S
是Long且T
可以是其他任何東西,您就可以創建一個實例。
這是一個簡單的例子。
static class OtherList<Integer> extends ArrayList<Integer>{}
public static void main (String[] args) throws java.lang.Exception
{
OtherList<String> list = new OtherList<>();
list.add("this");
System.out.println(list.size());
}
從實現中刪除所有類型(並且永遠不要使用類名來命名通用參數, 尤其是 JDK中的類-使用單個字母):
class TestBaseSample implements IDimension<TestBaseSample, Long> {
}
class TestBaseSample2 implements IDimension<TestBaseSample2, Long> {
}
class TestBaseSample3 implements IDimension<TestBaseSample3, Long> {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.