java - Generic Return Type?
我不确定这是否可能在Java中。另外,我也不知道该在谷歌上查询什么。无论如何,我希望一个方法将类(接口或类)作为参数,并且该方法的返回类型是该类的实例。我不想事后重铸一个物体。
我不确定这个特性是否存在或者语法是什么。假设我有一个名为xyz的类,这里是我的伪方法。
1 2 3 4 5 6
| private XYZ createInstance(XYZ.class, other args) {
...
// create an instance of XYZ with other args named"_xyz_"
...
return _xyz_;
} |
现在假设XYZ是某种通用语法。这在Java中可能吗?谢谢你的帮助。
1 2 3
| private <T> T createInstance(Class<? extends T> c) {
return c.newInstance();
} |
- 这与Java中泛型类型的创建实例所给出的答案相同吗?.
使用菱形运算符:
1 2 3 4 5 6
| private <T > T createInstance (Class <T > concreteClass ){
return concreteClass. newInstance();
}
//usage
Integer i = instanceWithThatMethod. createInstance(Integer. class); |
号
要传递"arguments",必须获取与所需参数类型匹配的类的构造函数,然后调用对该类的调用,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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 ){
...
} |
- 我们如何支持多个参数?
- @明桃章getConstructor(Class>... parameterTypes)是varargs-你可以使用concreteClass.getConstructor(Integer.class, String.class, List.class)然后会收到public SomeClass(Integer i, String s, List l)的参考。
- 我想知道我们是否可以接受(反对…args)作为createInstance的第二个参数。类似于此类的内容:[]types=new class[args.length];for(int i=0;i
- @要获得构造函数,需要将每个对象转换为其类类型。getConstructor采用Class>...not(语法错误):?...。
- 我认为这应该是答案的一部分。)
- @明桃章问题:需要同时提供类类型和值:createInstance(Class concreteClass, Object... args, Object... values),以便做return concrete.class.getConstructor(args).newInstance(values);—意思是:createInstance(SomeClass.class, Integer.class, String.class, 5,"Hello Word")—但不支持双varargs。
- 这些参数在运行时是否同时携带值和类型?
- @明桃章号,如果你像(1,"Hello World",false那样传递"值",你需要使用.getClass()来确定它们的类类型,你不能用它来找到一个构造函数。如果您通过Integer.class, String.class, Boolean.class,则没有关联的值。
- 真的。基元在此上下文中是特殊的…