是否能用instanceof来判断通过反射机制获取到的Field,如果可以怎么判断呢
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field:superFields){
Type type = field.getGenericType();
Object tt = type;
if(tt instanceof String){
System.out.println("我是String");
}
}
这样判断行不通,怎么办呀?
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field:superFields){
Type type = field.getGenericType();
Object tt = type;
if(tt instanceof String){
System.out.println("我是String");
}
}
这样判断行不通,怎么办呀?
for (int i = 0; i < fields.length; i++) {
// 跳过静态属性
String mod = Modifier.toString(fields[i].getModifiers());
if (mod.indexOf("static") != -1)
continue;
// 得到属性的类名
String className = fields[i].getType().getSimpleName();
// 得到属性值
if (className.equalsIgnoreCase("String"))
System.out.println(fields[i].getName()+"="+(String) fields[i].get(obj));
else if (className.equalsIgnoreCase("byte[]")) {
byte[] buffer = (byte[]) fields[i].get(obj);
System.out.println(fields[i].getName()+"="+buffer);
} else if (className.equalsIgnoreCase("boolean")) {
System.out.println(fields[i].getName()+"="+(Boolean) fields[i].get(obj));
} else if (className.equalsIgnoreCase("int")) {
System.out.println(fields[i].getName()+"="+((Integer) fields[i].get(obj)).intValue());
}
}
String str = "abc";
Object obj = str;if(obj instanceof String){
System.out.println("我是String");
}
2L正解啊 对比Name的String来匹配
Class类有个isAssignableFrom(Class<?> cls) 的方法,其作用是:
判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口示例:import java.lang.reflect.Field;
import java.lang.reflect.Type;public class FieldTest { public static void main(String[] args) {
Field[] fields = new Persion().getClass().getDeclaredFields();
for(Field field : fields){
Type type = field.getGenericType();
if(type instanceof Class<?>){
Class<?> cls = (Class<?>)type;
if(String.class.isAssignableFrom(cls)){
System.out.println("我是String");
}
}
} }
}
class Persion{
String name = "";
int age = 20;
boolean isMarried = false;
}