具有错误返回类型的泛型和BiPredicate

时间:2017-10-02 08:32:20

标签: java generics intellij-idea

在关注Java 8的课程时,我们现在讨论GenericsLambda 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>定义为此方法的返回类型。对不起,如果这是一个愚蠢的问题,我只是一个初学者,并想了解为什么它不正确。

1 个答案:

答案 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; }
}