[英]Java reflection & scala class
給定以下scala類:
class Student (_name:String, _id:Long) {
private var name:String = _name;
private var id:Long = _id;
// 2nd C'tor
def this(_name:String) = this(_name,0);
// 3rd C'tor
def this(_id:Long) = this("No Name",_id);
def printDetails() {
println("The student's name is : " + name);
println("The student's id is : " + id);
}
}
和以下Java類:
public class StudentReflectionDemo {
public static void main (String[] args) {
try {
Class cl = Class.forName("ClassesAndObjects.Student");
Method[] methods = cl.getMethods();
Field[] fields = cl.getFields();
System.out.println("The methods of the Student class are : ");
for (int i = 0 ; i < methods.length; i++) {
System.out.println(methods[i]);
}
System.out.println("The fields of the Student class are : ");
for (int i = 0 ; i < fields.length; i++) {
System.out.println(fields[i]);
}
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
它可以正確輸出Student類的方法,但不會輸出Student的類字段。
我在這里想念什么?
謝謝
在Java中, getFields()
方法僅返回public
字段。 要獲取所有字段,請使用getDeclaredFields()
,它將返回直接在類上聲明的所有字段。
如果查看getFields()
的Javadoc,則會看到答案:
返回一個包含Field對象的數組,該對象反映此Class對象表示的類或接口的所有可訪問公共字段 。
您需要使用getDeclaredFields()
代替:
返回一個Field對象數組,該數組反映由該Class對象表示的類或接口聲明的所有字段。 這包括公共,受保護,默認(程序包)訪問和私有字段,但不包括繼承的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.