我需要一个函数来返回我的类中所有私有数据成员的名称作为字符串(可能在数组或列表中?),其中每个字符串是我班级中私有非最终数据成员的名称。非最终条件是可选的,但它会很好。
1)这甚至可能吗?我认为有一种方法可以检索类中的所有方法名称,所以我认为这也是可能的。
2)我知道我要求分发,但我该怎么做?
修改
我不知道从哪里开始。
似乎java.lang.reflect
是一个好的开始。我已经开始在那里研究了。
答案 0 :(得分:2)
这应该可以解决问题。基本上,你列出了班级的所有字段,并删除了非私有字段。 :
public static void main(String [] args){
List<Field> list = new ArrayList<>(Arrays.asList(A.class.getDeclaredFields()));
for(Iterator<Field> i = list.iterator(); i.hasNext();){
Field f = i.next();
if(f.getModifiers() != Modifier.PRIVATE)
i.remove();
}
for(Field f : list)
System.out.println(f.getName());
}
输出:
fieldOne
fieldTwo
A类:
class A {
private String fieldOne;
private String fieldTwo;
private final String fieldFinal = null;
public char c;
public static int staticField;
protected Long protectedField;
public String field;
}
答案 1 :(得分:1)
Object someObject = getItSomehow();
for (Field field : someObject.getClass().getDeclaredFields()) {
field.setAccessible(true); // You might want to set modifier to public first.
Object value = field.get(someObject);
if (value != null) {
System.out.println(field.getName() + "=" + value);
}
}
答案 2 :(得分:0)
您可以通过Class.getDeclaredMethods()访问所有公共方法,但是为了访问私有方法,您必须知道私有方法的名称。
访问私有方法:
Method privateMethod = MyObj.class.
getDeclaredMethod("myPrivateMethod", null); //return private method named "myPrivateMethod"
privateMethod.setAccessible(true); //turn off access check for reflection only
Object o = privateMethod.invoke(MyObj, null); //call private method