【问题标题】:Generics - Function return type the same as the parameter type?泛型 - 函数返回类型与参数类型相同?
【发布时间】:2018-12-24 14:40:09
【问题描述】:

我想创建一个返回List的函数,其数据类型与传入的参数的数据类型相同。例如,我会这样调用函数:

Object a = new Object();
List<Object> aList = foo(a);

Integer b = 5;
List<Integer> bList = foo(b);

因为我将Object 传递给foo,所以它返回了List&lt;Object&gt; 给我。当我通过Integer 时,会提供List&lt;Integer&gt;

如果这是不可能的,我也可以使用如下语法:

Object a = new Object();
List<Object> aList = foo(Object.class, a);

我之前用过很多次泛型但是不知道如何在返回类型中定义一个数据类型,然后说参数会使用相同的数据类型。

List<T> foo(T data)
{
   ...
}

或者它必须像....List&lt;T extends Object&gt;?我以前从未做过如此高级的泛型。

【问题讨论】:

    标签: java generics


    【解决方案1】:

    你需要在函数的返回类型之前指定泛型类型说:

    public static <T> List<T> foo(T data) {
        return new ArrayList<>();
    }
    

    【讨论】:

    • 知道如何使用:Function<T, R>?我做不到Function&lt;&lt;T&gt; &lt;List&lt;T&gt;, T&gt;
    • @Hatefiend in Function&lt;T,R&gt;, T 是输入参数的类型,R 是返回参数的类型,如果它接受T 并返回T 那么它将是 public static &lt;T, T&gt; Function&lt;List&lt;T&gt;, T&gt;foo(T data) { // ...} 这接受 Ts 的列表并返回 T 类型的东西
    • 谢谢。 Function&lt;T, List&lt;T&gt;&gt; 有效但 List&lt;T&gt; foo(T bar) 无效,这很奇怪。我完全不明白。
    • @Hatefiend 实际上,在我之前的评论中,&lt;T, T&gt; 不是必需的,因为您只使用一种泛型类型T,因此public static &lt;T&gt; Function&lt;List&lt;T&gt;, T&gt;foo(T data) { // ...} 可以正常工作。 List&lt;T&gt; foo(T bar) 不起作用是什么意思?
    • 我可能不理解你。我尝试了this waythis way,但我无法像之前定义T 那样定义&lt;T&gt; List&lt;T&gt; foo(T bar) 这样的常规函数​​。如果可能的话,我想使用Function&lt;T, R&gt; 将这个函数变成一个变量。
    【解决方案2】:

    我忘了你可以在返回类型之前添加一个类型。

    <T> List<T> foo(T bar)
    {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多