使用Reflection API时无法找到符号字段

时间:2013-12-03 15:11:17

标签: java

我正在尝试学习如何使用反射来打印出类的字段,方法和构造函数。以下是有问题的代码:

static void displayMethodInfo(Object obj){
        Class c = obj.getClass();
        System.out.println(c + "{");
        int mods;
        Field fields[] = c.getDeclaredFields();
        for(Fields f : fields){
            if(!Modifier.isPrivate(f.getModifiers()))
                System.out.println("\t" + f);
        }
        Constructor [] constructors = c.getConstructors();
        for(Constructor con : constructors){
            System.out.println("\t" + con);
        }
        Method methods[] = c.getDeclaredMethods();
        for(Method m : methods){
            if(!Modifier.isPrivate(m.getModifiers()))
                System.out.println("\t" + m);
        }
        System.out.println("}");
    }

我为Field获取的错误与我为构造函数和方法获得的错误相同:

MethodInfoTest.java:11: cannot find symbol
symbol  : class Field
location: class MethodInfoTest
                Field fields[] = c.getDeclaredFields();
                ^
MethodInfoTest.java:12: cannot find symbol
symbol  : class Fields
location: class MethodInfoTest
                for(Fields f : fields){

我相信我使用的是正确的API,我使用的是import java.lang。*;我认为我们需要使用Field,Method和Constructor。关于我们如何使用这些类型,我是否有些误导?

5 个答案:

答案 0 :(得分:5)

使用星号导入不会导入子包。 FieldMethodConstructor java.lang.reflect 的成员。

答案 1 :(得分:1)

你应该使用:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

答案 2 :(得分:1)

将来使用正确的IDE并按下一些称为“组织导入”的关键字,它将使用导入为您修复所有内容。

答案 3 :(得分:0)

使用以下导入语句。

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.Method;

另外,我认为Fields不是Reflection API中的类。

我的建议是尝试使用IDE,它会建议可能的编译问题。

答案 4 :(得分:0)

你需要:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

考虑使用IDE,例如Eclipse。