【问题标题】:Creating generic class objects from another class从另一个类创建通用类对象
【发布时间】:2017-03-21 08:22:37
【问题描述】:

我有课,

class Sample<T>{
//Implementation
}

我想从另一个类创建该类的对象。以下代码示例有效。

class SampleManager{
   public static <R>  Sample<R> getInstance(){
      return new Sample<R>();
   }
}

但我想将类作为参数传递。喜欢,

class SampleManager{
   public static  Sample getInstance(Class clazz){
      return new Sample<clazz>;
   }
}

我怎样才能做到这一点?有没有其他方法可以实现这一目标?

【问题讨论】:

  • 泛型类型在Sample中是如何使用的?
  • 也许这个:public static &lt;T&gt; getInstance(T witness){ return new Sample&lt;T&gt;()} ?
  • Class clazz 代表一个raw。你也可能是说Class&lt;R&gt; clazz
  • @Thilo 我也是这么想的;但是如何使用witness?这有点没有意义......
  • 是的;所以我认为真正的问题是:你到底想做什么?

标签: java oop generics


【解决方案1】:

您的第二个示例不应编译,缺少返回类型。你想要的是这样的:

public static <R> Sample<R> getInstance(Class<R> clazz) {
    return new Sample<R>();
}

使用 Java 8,您还可以返回 new Sample&lt;&gt;()

【讨论】:

  • 但是当它从未在该方法中使用时,那个论点clazz 的意义何在?我也想过这个想法,但我觉得它非常可疑。
  • @GhostCat:如果没有任何有关 Sample 的信息(以及甚至无法编译的代码),很难说出什么是有意义的。
  • 我猜clazz 刚刚通过,因为 OP 不知道该怎么做。我认为,在这个答案中,您应该删除未使用的 clazz 参数。
  • @Stefan 谢谢。我正在寻找 getInstance(Class clazz) 而不是 getInstance(Class clazz)。它对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多