雖然遵循Java課程,但我被要求將常規類轉換爲通用類。我認爲我部分成功了,但是可以找到一種方法讓它100%正確。Java泛型未經檢查的警告和方法不能從靜態內容引用
public class ElementUtils {
public static <T> List transformedList(List<T> inList, Function<T, T> f) {
List<T> outList = new ArrayList<>();
for (T s : inList) {
outList.add(f.apply(s));
}
return outList;
}
}
測試類
public class Test {
public static void main(String[] args) {
List<String> lijst = Arrays.asList("Jan", "Jos", "Anna", "Pieter", "Johan");
List<String> upCaseList = ElementUtils.transformedList(lijst, String::toUpperCase);
List<String> replaceList = ElementUtils.transformedList(lijst, s -> s.replace("i", "IETS"));
List<String> exclList = ElementUtils.transformedList(lijst, s -> s + "!");
List<Integer> wordLengths = ElementUtils.transformedList(lijst, String::length);
System.out.println(upCaseList);
System.out.println(replaceList);
System.out.println(exclList);
System.out.println(wordLengths);
}
}
當我刪除的最後一條語句wordLengths
它工作正常,但拋出一個警告。通過最後一條語句,它告訴我不能從靜態內容引用方法。
錯誤:
Error:(13, 49) java: method transformedList in class cvo.ex2.ElementUtils cannot be applied to given types;
required: java.util.List<T>,java.util.function.Function<T,T>
found: java.util.List<java.lang.String>,String::length
reason: inference variable T has incompatible bounds
equality constraints: java.lang.String
lower bounds: java.lang.Integer
我不明白我在這裏失蹤......謝謝你的幫助。
什麼是確切的消息? – Stultuske
更新OP與消息 – DarkLite1
這可能能夠幫助:https://stackoverflow.com/questions/27522741/incompatible-types-inference-variable-t-has-incompatible-bounds – Stultuske