[英]Generics and BiPredicate with incorrect return type
在學習Java 8
的課程時,我們現在討論Generics
和Lambda expressions
的主題。 我們被要求做以下方法Generic
而不是String
:
public static String betterString(String s1,String s2,IBetterString bs){
if(bs.isBetter(s1, s2)){
return s1;
}else{
return s2;
}
}
到目前為止,我所做的是:
public static <T> betterEllement(T s1, T s2, BiPredicate<T, T> bi) {
if (bi.test(s1, s2)) {
return s1;
} else {
return s2;
}
}
但看來我根據Intellij Return type
不正確。 我真的不明白為什么會這樣,因為我將<T>
定義為該方法的返回類型。 抱歉,如果這是一個愚蠢的問題,我只是一個初學者,想了解為什么它不正確。
因為您沒有使用方法返回任何內容。 <T>
定義它是未知的通用類型。 那並不意味着您退還它。 您需要添加另一個T,它是通用Type返回值。
它的
public static <T> T betterEllement(T s1, T s2, BiPredicate<T, T> bi) {
if (bi.test(s1, s2)) {
return s1;
} else {
return s2;
}
}
如果您知道返回值但想定義通用參數,也可以使用<T>
。
public static <T> String getStringTest(T test) {
if (test.getClass().isInstance(WhatEver.class)) { ....}
return "test";
}
您可以使用泛型類完美地看到它。
class TestGeneric<T> {
public T betterElement(T s1) { /** .. **/ return null; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.