【问题标题】:Java Generics Return Type Syntax [duplicate]Java泛型返回类型语法[重复]
【发布时间】:2017-08-25 03:44:06
【问题描述】:

我正在尝试学习如何编写一个方法来返回一个未知类型的对象列表。我遇到过这个例子:

public <T> List<T> list(Class<T> c, List<Object> objectList){        
    List<T> list = new ArrayList<>();       
    for (Object o : objectList){
        T t = c.cast(o);
        list.add(t);
    }
    return list;
}

为什么返回类型是&lt;T&gt; List&lt;T&gt; 而不是简单的List&lt;T&gt;

【问题讨论】:

  • 因为它是一个泛型方法。
  • 第一个&lt;T&gt; 声明了类型参数。只有List&lt;T&gt;,必须存在名称为T 的实际类。
  • 具体值,this answer
  • 仅作记录:您仍然可以接受答案……即使答案已关闭。所以考虑稍后再做...

标签: java list generics


【解决方案1】:

那是不是返回类型:

public <T> List<T>

这只是意味着:T 是一个泛型参数只是这个方法!

您可以将类型参数放在 仅放在方法上。你看 - 当你的所有其他方法确实需要一个泛型类型时......那么你可能只将它用于这样的单个方法。

请参阅here 以进一步阅读!

【讨论】:

    【解决方案2】:

    这是因为您的 list 方法有自己的泛型类型参数。 &lt;T&gt;介绍这种类型:

    <T> List<T> list(Class<T> c, List<Object> objectList)
     ^       ^             ^
     |       +-------------+----- Use generic type
     +--------------------------- Introduce generic type argument for use in the method
    

    当泛型方法使用其封闭类的类型参数时,不需要初始 &lt;T&gt;

    【讨论】:

    • 我喜欢你的 ascii 艺术 .. p1 !
    【解决方案3】:

    &lt;T&gt; 不是返回类型。它定义了该泛型方法的类型。查看参数列表,您还可以找到一个具有泛型类型信息的类

    【讨论】:

      【解决方案4】:

      返回类型为List&lt;T&gt;

      &lt;T&gt; 是“模板”/泛型声明:您在其中声明泛型类型。我不认为它是结果类型的实际部分(这可能是错误的)。

      【讨论】:

        猜你喜欢
        • 2015-05-16
        • 1970-01-01
        • 2015-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多