【问题标题】:Java How to use class object for List initialisation [duplicate]Java如何使用类对象进行列表初始化[重复]
【发布时间】:2015-07-21 15:31:50
【问题描述】:

如何使用类对象来分配List的类型?

public void assign(Class name){
 List<name> xlist = new ArrayList();
}

【问题讨论】:

  • 您可以使用Object 稍后将其转换为特定类型
  • 你认为你为什么需要这个?
  • @user3703592 public &lt;T&gt; void assign(T t) { List&lt;T&gt; xlist = new ArrayList&lt;&gt;(); }
  • @SotiriosDelimanolis 不确定这是否是一个重复,因为 OP 没有在任何地方返回 xlist
  • @LuiggiMendoza 这与问题无关。这是关于答案的。接受答案(和其他答案)解释了如何做他们想做的事情,即使在这个例子中没有意义。

标签: java


【解决方案1】:

这可能会:

public <T> void assign(Class<T> clazz) {
    List<T> xlist = new ArrayList<>();
    /*
        more code here...
    */
}

【讨论】:

  • 我相信这是因为 Class&lt;T&gt; clazz 在这里毫无意义。
  • @CKing 这不是没有意义的。方法是void,所以没有参数,无法获取T。并且xlist 不会在任何地方返回。
  • T 代替Class&lt;T&gt; 不够吗?
  • @CKing 不。自己测试一下。当然,我假设泛型是在方法级别,而不是在类级别。
  • public &lt;T&gt; void assign(T t) { List&lt;T&gt; xlist = new ArrayList&lt;&gt;(); /* more code here... */ } 这对我来说很好用。为什么是Class&lt;T&gt;
【解决方案2】:

你可以使方法通用:

public <T> void assign(){
    List<T> xlist = new ArrayList<T>();
}

或者可以在类级别(包含assign方法的类)声明泛型类型参数。

这样您就不需要将Class 实例传递给您的方法。

【讨论】:

  • 小心。方法是void。有了这种实现,就无法从任何地方获取T
  • @LuiggiMendoza 例如,您可以调用test.&lt;String&gt;createList();,假设test 是包含该方法的类的实例。您不需要返回类型。
  • 我知道,但 AFAIK 这不是常见的 Java 代码。只是想避免这种编码方式。
【解决方案3】:

我想你正在寻找这个:

public <T> void assign(Class<T> name) {
    List<T> xlist = new ArrayList<>();
}

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 2015-04-24
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2018-08-27
    • 2017-02-27
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多