在关注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>
定义为此方法的返回类型。对不起,如果这是一个愚蠢的问题,我只是一个初学者,并想了解为什么它不正确。
答案 0 :(得分:5)
因为您没有使用您的方法返回任何内容。 <T>
定义它是一个尚未知的泛型类型。这并不意味着你回来了。您需要添加另一个T,它是泛型类型的返回值。
及其
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; }
}