是否能用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");
}

这样判断行不通,怎么办呀?

解决方案 »

  1.   

    Field[] fields = obj.getClass().getDeclaredFields();
    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());
    }
    }
      

  2.   

    你想要达到什么目标呢,调用field.getGenericType()你想要做什么?
      

  3.   

    type不是String类型或它的子类所以判断永远为false(ps:String不可能有子类)
      

  4.   

    额,那String类型不能用于instanceof的判断了
      

  5.   

    不能用instanceof这个关键字吗?
      

  6.   

    可以啊,比如
    String str = "abc";
    Object obj = str;if(obj instanceof String){
    System.out.println("我是String");
    }
      

  7.   

    你的tt不是Type类型的么。。怎么能是String呢
    2L正解啊 对比Name的String来匹配
      

  8.   

    虽然你没有用instanceof来判断,但是基本上满足了我的需求。我还是去结贴了吧
      

  9.   

    多翻翻API一般的问题都能解决
      

  10.   

    看到结帖率为0的,我本不...有问题先查看API。
    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;

    }