我有以下代码。
public <T> List<Object> types(Class<T> clazz) {
Field[] fields = clazz.getDeclaredFields();
List<Object> types = Arrays.stream(fields)
.map(Field::getType)
.collect(Collectors.toList());
return types;
}
我在以后如何将字段类型作为Class对象传递时感到很挣扎。我将在反射中使用它们(clazz
这里是类Contact
):
for (Object type : name(clazz)) {
Method method = obj.getClass().getDeclaredMethod("myMethod", type.getClass());
}
假设type
是String
,如果我将其打印为:
System.out.println(type);
输出为:class java.lang.String
,但如果我将其打印为:
System.out.println(type.getClass();
输出为:class java.lang.Class
。因此,如果我将其作为type.getClass()
通过,则反射会抱怨:
java.lang.NoSuchMethodException: Contact.myMethod(java.lang.Class)
请帮助。谢谢。
答案 0 :(得分:2)
Field::getType
返回一个类。为什么将其存储到您收集的流中的Object
中?
只需将它们收集到班级列表中即可。
除了作用域的参数化类型方法在这里是无奈的。您不想推断任何类型。
那会给:
public List<Class<?>> types(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
List<Class<?>> types = Arrays.stream(fields)
.map(Field::getType)
.collect(Collectors.toList());
return types;
}
请注意,您收集了声明的字段,然后似乎要在通过反射检索的方法中使用它们。还不是很清楚。
答案 1 :(得分:1)
感谢您尝试帮助我。但是,我碰到了运气。我只是改变了:
type.getClass()
到
type.toString().getClass()
答案 2 :(得分:0)
尝试更改
public <T> List<Object>
通过
public <T> List<T>