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)
...
【讨论】:
我们如何支持多个参数? @MingtaoZhanggetConstructor(Class<?>... 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<?>...
- 不是(语法错误):?...
我认为它应该是答案的一部分:)以上是关于java - 通用返回类型? [复制]的主要内容,如果未能解决你的问题,请参考以下文章