10

<T>次のコード スニペットは何を意味していますか?

class Test {    
     <T> void say() {

     }    
}
4

3 に答える 3

14

あなたの例では、それは本当に意味がありません。ただし、メソッドの戻り値の型が void の場合<T>でも、想定されるジェネリック パラメーターの型として使用できます。このことを考慮

public static <T> void test(List<T> list1, List<T> list2) {
    list1.addAll(list2);
}

public static void main(String[] args) throws Exception {
    test(Arrays.asList(1, 1), Arrays.asList("1", "1"));
}

型安全制御、javac はエラーを返し、test() は同じ型のリストを期待します。

別の例 java.util.Collections.fill

public static <T> void fill(List<? super T> list, T obj) {
    ....
}    

安全制御を再度入力します。

于 2013-01-10T15:14:57.110 に答える
8

Tおそらくほとんどすべてのタイプのタイププレースホルダーが導入されています。これは通常T、署名の一部である場合に役立ちます (パラメーターまたは戻り値の型として)。

<T> void say(T myT) {}
say<Object>(myObject);
say<String>(myString);

<U> U foo(U u) { return u; }
String s = foo<String>("");

内部使用のためだけに型パラメーターを導入することはほとんど役に立ちません。実際の型パラメーターTは、メソッドよりも消費者にとって興味深いことが多いためです。

于 2013-01-10T15:01:13.737 に答える
3

Javaのジェネリックに関するこのドキュメントを参照してください

ただし、引数リストにパラメーター化された型がある場合にのみ役立ちます。

于 2013-01-10T15:02:39.370 に答える