【问题标题】:what <T> signifies in <T> void say() [duplicate]<T> 在 <T> 中表示什么 void say() [重复]
【发布时间】:2013-01-10 23:35:28
【问题描述】:

&lt;T&gt; 在下面的代码 sn-p 中表示什么?

class Test {    
     <T> void say() {

     }    
}

【问题讨论】:

  • ...您可以删除整个类 AFAIK。

标签: java generics


【解决方案1】:

在您的示例中,这确实没有意义。但在其他情况下,如果方法的返回类型为 void &lt;T&gt; 仍然可以用作预期的泛型参数类型。考虑一下这个

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) {
    ....
}    

再次键入安全控制。

【讨论】:

    【解决方案2】:

    它引入了一个类型占位符,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 对于消费者来说通常比​​方法更有趣。

    【讨论】:

      【解决方案3】:

      this doc about generics in java

      但只有在参数列表中有参数化类型时它才有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-16
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 2019-08-08
        • 1970-01-01
        相关资源
        最近更新 更多