繁体   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