簡體   English   中英

Java反射和scala類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM