【问题标题】:Declare Generic Type for class based on method parameter根据方法参数为类声明通用类型
【发布时间】:2015-10-08 11:58:48
【问题描述】:

我的要求和下面类似

public List getList(XXX xxx) {
List<xxx> list = new ArrayList<xxx>();
----some logic goes here----
return list;
}

我想根据传递给方法的参数声明一个类的泛型类型。在上述方法中,xxx 可能是 String 或 Integer 或 Float。

如何做到这一点?

提前致谢

【问题讨论】:

  • public &lt;T&gt; List getList(T t) { List&lt;T&gt; list = new ArrayList&lt;T&gt;(); ....
  • 感谢您的回复。好像我得到了正确的答案。让我试着确认一下。
  • 我有一个疑问。在方法签名之前提到 有什么用。 (即 public List getList ......)你能澄清一下吗?
  • 检查here 以获得您的澄清
  • @Natalia:T 在您的代码中毫无意义,因为它仅在参数中的一个位置使用,而不在返回中使用。相当于public List getList(Object t)

标签: java generics collections


【解决方案1】:

你可以使用:

    public <T> List<T> getList(T param){
        return new ArrayList<>();
    }

【讨论】:

  • 这不会编译,除非它已经在一个具有泛型参数&lt;T&gt;的类中。
  • 那个答案缺少T参数的使用......不应该是ArrayList&lt;T&gt;();吗?
  • @DaDaDom 不是 Java 7。T 可以在返回上下文中推断。 javaworld.com/article/2074080/core-java/… 但是,缺少 T 的声明,如 public &lt;T&gt; List&lt;T&gt; getList(T param){
  • 嗯,好的,没错。我从没想过从方法内部到返回类型的类型。
  • 不应该是 public &lt;T&gt; List&lt;T&gt; 即 att &lt;T&gt;
【解决方案2】:

你也可以用这个:

public List<Object> getList(Object object) {
  List<Object> list = new ArrayList<Object>();
  ----some logic goes here----
  return list;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多