如何获取 class 中的所有变量和类型数据以及使用 java 的方法
how to get all variable and type data in class and method using java
我有一个 class,我想找到所有变量和类型数据。
例如
class ex
{
String A,B;
public void method()
{
int a;
double C;
String D;
}
}
所以我想要这样的输出
A : String
B : String
a : int
C : double
D : String
检查reflection,你可以得到class运行时的所有信息
您可以使用 reflection
来获得 A
和 B
是肯定的。但是您无法获得其他 local
变量的相同信息。
您可以使用反射 API 中的方法 Class.getDeclaredMethods()
和 Class.getDeclaredFields()
来列出 class 方法和属性。
for (Method m : ExampleClass.class.getDeclaredMethods()) {
System.out.println(m.getName() + ": " + m.getGenericReturnType());
}
for (Field f : ExampleClass.class.getDeclaredFields()) {
System.out.println(f.getName() + ": " + f.getType());
}
但是不能正常访问局部变量信息。在 Java8 中,您可以使用方法 Method.getParameters()
访问方法参数。所以你可以这样做:
for (Method m : ExampleClass.class.getDeclaredMethods()) {
for (Parameter p : m.getParameters()) {
System.out.println(p.getName() + ": " + p.getType());
}
}
默认情况下,参数名称不存储在.class文件中,因此参数将列为arg0
、arg1
等。获取真正的参数使用 javac 编译器的 -parameters 选项编译源文件所需的名称。
我有一个 class,我想找到所有变量和类型数据。
例如
class ex
{
String A,B;
public void method()
{
int a;
double C;
String D;
}
}
所以我想要这样的输出
A : String
B : String
a : int
C : double
D : String
检查reflection,你可以得到class运行时的所有信息
您可以使用 reflection
来获得 A
和 B
是肯定的。但是您无法获得其他 local
变量的相同信息。
您可以使用反射 API 中的方法 Class.getDeclaredMethods()
和 Class.getDeclaredFields()
来列出 class 方法和属性。
for (Method m : ExampleClass.class.getDeclaredMethods()) {
System.out.println(m.getName() + ": " + m.getGenericReturnType());
}
for (Field f : ExampleClass.class.getDeclaredFields()) {
System.out.println(f.getName() + ": " + f.getType());
}
但是不能正常访问局部变量信息。在 Java8 中,您可以使用方法 Method.getParameters()
访问方法参数。所以你可以这样做:
for (Method m : ExampleClass.class.getDeclaredMethods()) {
for (Parameter p : m.getParameters()) {
System.out.println(p.getName() + ": " + p.getType());
}
}
默认情况下,参数名称不存储在.class文件中,因此参数将列为arg0
、arg1
等。获取真正的参数使用 javac 编译器的 -parameters 选项编译源文件所需的名称。