簡體   English   中英

具有錯誤返回類型的泛型和BiPredicate

[英]Generics and BiPredicate with incorrect return type

在學習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>定義為該方法的返回類型。 抱歉,如果這是一個愚蠢的問題,我只是一個初學者,想了解為什么它不正確。

因為您沒有使用方法返回任何內容。 <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM