2017-10-02 20 views
0

Java 8のコースに続き、今度はGenericsLambda expressionsのトピックになります。我々は、次の方法Genericを作るように頼まだけではないStringてきた:戻り値の型が正しくないジェネリックとBiPredicate

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

しかし、私のReturn typeがのIntelliJによると思われます間違っています。私はこのメソッドの戻り値の型として<T>を定義したので、なぜそれがどういうものなのか分かりません。申し訳ありませんが、これは愚かな質問である場合、私は初心者であり、それがなぜ正しくないのか理解したいと思います。

答えて

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; } 
} 
+1

お客様の歓迎です。心に留めておいてください。 Tは単なるプレースホルダです。任意の文字または文字列であっても構いませんが、Tは一般的な(T)ypeであるため通常は使用されます。 –

関連する問題