gpt4 book ai didi

java - 如何从 genericReturnType 创建实例

转载 作者:行者123 更新时间:2023-12-04 13:26:22 25 4
gpt4 key购买 nike

这里我需要创建一个java.util.List 的对象,其中
我有 java.util.List 仅可用作字符串。
演示课

class Demo {
public List<User> allUser() {
// some stuff
}
}
在另一个类(class)
Method method = null;
try {
Class cls= Class.forName("Demo"); // fully qualified Name here for sure

Method[] methods = cls.getMethods();
for (Method _method:methods) {
if(_method.getName().equals("allUser")) {
method = _method;
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(method != null) {
java.lang.reflect.Type genericReturnType = method.getGenericReturnType();
}
这里我需要创建一个java.util.List 的对象,我只有
genericReturnType = java.util.List
我试过
Class clazz = Class.forName(genericReturnType.getTypeName());
这将返回 java.lang.ClassNotFoundException我想创建 java.util.List 的实例
问题是方法 allUser可以是任何东西,方法的返回类型可以是任何东西
东西直到方法 genericReturnType看起来不错。我需要在 genericReturnType 的帮助下创建一个对象。
注意:考虑到代码中没有任何语法错误。
让我简化一下。
// I want to achive this
String clsName = "java.util.List<com.entity.User>"; // consider fully qualified name
Class cls = Class.forName(clsName); // from here I got error java.lang.ClassNotFoundException
Object clsInstance = (Object) cls.newInstance();
我想用 com.entity.User 做一些处理如果有用户列表,(可能有任何类型的列表而不是用户)所以 我还需要确定 List 的通用类型 .
提前致谢。

最佳答案

您可以在转换 Type 后提取泛型类型 this成ParameterizedType :
ReflectionTest.java

public class ReflectionTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Method method = null;
try {
Class cls = Class.forName("Demo"); // fully qualified Name here for sure

Method[] methods = cls.getMethods();
for (Method _method : methods) {
if (_method.getName().equals("allUser")) {
method = _method;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (method != null) {
System.out.println(method.getReturnType());
ParameterizedType parameterizedType = (ParameterizedType) method.getGenericReturnType();

if (parameterizedType.getActualTypeArguments().length > 0 && parameterizedType.getActualTypeArguments()[0] instanceof Class<?>) {
Class type = (Class) parameterizedType.getActualTypeArguments()[0];

User user = (User) type.newInstance();

System.out.println(user.getClass());
}
}
}
}

class Demo {
public List<User> allUser() {
return Collections.emptyList();
}
}
用户.java
public class User {

}

关于java - 如何从 genericReturnType 创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68350938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com