Я, должно быть, что-то здесь упускаю, но у меня, похоже, есть некоторые проблемы с базовыми размышлениями.Я думал, что из-за таких вещей, как бокс, я получу правду за каждый из двух отпечатков ниже.Вот простой основной класс:
package com.reflection;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestingReflection {
public static void main(String[] args) throws SecurityException,
NoSuchMethodException,
IllegalArgumentException,
IllegalAccessException,
InvocationTargetException
{
final Class c = Reflection.class;
Reflection p = new Reflection();
p.setIntObj(new Integer(1));
p.setIntPrim(1);
for (Field field : c.getDeclaredFields()) {
char first = Character.toUpperCase(field.getName().charAt(0));
String capitalized = first + field.getName().substring(1);
Method getField =
c.getDeclaredMethod("get" + capitalized, new Class [] {});
Class fieldClass = getField.getReturnType();
Method setField =
c.getDeclaredMethod("set" + capitalized,
new Class [] { fieldClass });
Object value = getField.invoke(p, new Object [] {});
if (value != null) {
System.out.println("Field Class: "
+ fieldClass.getName()
+ " instanceOf: "
+ fieldClass.isInstance(value)
+ " Value Class: "
+ value.getClass().getName());
}
}
}
}
Вот класс, с которым я его запускаю:
package com.reflection;
public class Reflection {
private int intPrim;
private Integer intObj;
public int getIntPrim() { return intPrim; }
public void setIntPrim(int intPrim) { this.intPrim = intPrim; }
public Integer getIntObj() { return intObj; }
public void setIntObj(Integer intObj) { this.intObj = intObj; }
}
Вот вывод, который я получаю:
Field Class: int instanceOf: false Value Class: java.lang.Integer
Field Class: java.lang.Integer instanceOf: true Value Class: java.lang.Integer
Есть ли другой метод, который я должен использовать, чтобы определить это?isAssignableFrom также возвращает false для примитива.