java - 通用返回类型? [复制]

Posted

技术标签:

【中文标题】java - 通用返回类型? [复制]【英文标题】:java - Generic Return Type? [duplicate] 【发布时间】:2014-04-28 19:11:42 【问题描述】:

我不确定这在 Java 中是否可行。此外,我无法弄清楚在谷歌上查询什么。 无论如何,我想要一个将类(接口或类)作为参数的方法,并且该方法的返回类型是该类的实例。我不想事后重铸一个对象。

我不确定此功能是否存在或语法是什么。假设我有一个名为 XYZ 的类,这是我的伪方法。

private XYZ createInstance(XYZ.class, other args) 
  ...
  // create an instance of XYZ with other args named "_xyz_"
  ...
  return _xyz_;

现在假设 XYZ 是某种通用语法。这在Java中是否可能?感谢您的帮助。

【问题讨论】:

这是什么副本?下面链接的问题不匹配。 【参考方案1】:
private <T> T createInstance(Class<? extends T> c) 
    return c.newInstance();

【讨论】:

这与Create instance of generic type in Java?中给出的答案相同。【参考方案2】:

使用菱形运算符:

private <T> T createInstance(Class<T> concreteClass)
  return concreteClass.newInstance();


//usage
Integer i = instanceWithThatMethod.createInstance(Integer.class);

要传递“参数”,您必须获取与所需参数类型匹配的类的构造函数,并调用该类的调用,如下所示:

private <T> T createInstance(Class<T> concreteClass, String stringArg)
    return concreteClass.getConstructor(String.class).newInstance(stringArg);


//usage
SomeClass s = createInstance(SomeClass, "testString");

//equals
SomeClass s = new SomeClass("testString");

//where SomeClass HAS to serve:
public SomeClass(String s)
  ...

【讨论】:

我们如何支持多个参数? @MingtaoZhang getConstructor(Class&lt;?&gt;... parameterTypes) 是可变参数 - 你可以使用concreteClass.getConstructor(Integer.class, String.class, List.class) 然后会收到对public SomeClass(Integer i, String s, List l) 的引用 我想知道我们是否可以接受 (Object... args) 作为 createInstance 的第二个参数。像这样的东西 Class[] types = new Class[args.length]; for(int i = 0; i @MingtaoZhang 您需要将每个对象转换为其 classType 以获得构造函数。 getConstructor 采用 Class&lt;?&gt;... - 不是(语法错误):?... 我认为它应该是答案的一部分:)

以上是关于java - 通用返回类型? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Java 方法返回任何类型的通用列表?

更改 doInBackground 中的通用返回类型

如何创建通用数组? [复制]

快速返回特殊类型的通用协议的方法

创建一种方法来检查Java中的通用HashMap中是不是存在值? [复制]

通用 DAO 如何为所有不同的 DAO 实现返回相同的类型?