[英]Guava Function with generic types
我正在嘗試編寫一些我將在其余代碼中經常使用的Function
。 其中一些是比如說,總結一個Iterable
所有數字。 而不是為Double
, Integer
等實現不同的函數。我想要一個函數,它總結給定Iterable的所有元素, 只要每個元素是一個數字 。 為了做到這一點,我嘗試了以下方法:
<T> Function<List<T extends Number>, T> sum = new Function<List<T extends Number>, T>() {
public T apply(List<T> tlist) {
// the main code
}
};
但是我收到編譯錯誤,說“意外令牌”。 我以前用泛型編寫了我自己的Java方法,但是我不明白為什么同樣的東西在這里不起作用。 我錯過了一些非常明顯的東西,還是番石榴功能不允許使用仿制葯?
幾件事:
T extends Number
),則必須在聲明類型的地方執行此操作(例如,不是<T> Function...
但是<T extends Number> Function...
)。 我看到路易斯已經涵蓋了這個。 Number
求和的函數,盡管你可以合理地接近我的想法。 您必須考慮大於任何內置基元類型可以表示的數字的可能性( BigInteger
, BigDecimal
,甚至可能是自定義Number
子類)。 Double
則您的方法根本不需要類型參數。 它可以是:
Function<List<? extends Number>, Double> sum = new Function<List<? extends Number, Double>() {
public Double apply(List<? extends Number> numbers) {
// the main code
}
}
你不能像這樣定義一個多態變量 ,你也只能在T
類型變量的初始聲明中放入像extends Number
這樣的邊界。 我懷疑與你的意思最接近的東西實際上是有用的
<T extends Number> Function<List<T>, T> sum() {
return new Function<List<T>, T>() {
public Double apply(List<T> doubles) {
// the main code
}
};
}
...除了你還有問題返回Double
而不是T
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.