【发布时间】:2015-10-29 18:43:53
【问题描述】:
在 python 中是否有与“dir”等效的 java 或提供类似功能的库(即作为信息字符串输出的对象和类的属性)?
这个问题与 clojure 的 question 类似,并且可能与 question 中的 Java 反射有关,这似乎是一个更复杂但相似的主题。
【问题讨论】:
标签: java reflection
在 python 中是否有与“dir”等效的 java 或提供类似功能的库(即作为信息字符串输出的对象和类的属性)?
这个问题与 clojure 的 question 类似,并且可能与 question 中的 Java 反射有关,这似乎是一个更复杂但相似的主题。
【问题讨论】:
标签: java reflection
标准库中没有什么可以完全完成dir() 所做的工作,但您可以使用java.lang.reflect 获得相同的信息。具体来说,在the documentation on discovering class members 中解释了调查和发现类的成员。使用该 API,您可以轻松找到您需要了解的有关类属性的信息。
事实上,您自己实现dir() 只需定义一个方法,该方法可以内省类的方法和字段,并组装信息集合或打印您想知道的任何信息。
dir() 在 Java 中的用处有限,因为 Java 不是交互式的,但如果您需要它用于教育/调查目的或应用程序逻辑,反射 API 始终存在。
【讨论】:
我在想是否使用 javap 是一个不错的选择。男人说
javap - The Java Class File Disassembler
我可以看到内置方法
javap java.lang.Double | grep -i int
public static final int MAX_EXPONENT;
public static final int MIN_EXPONENT;
public static final int SIZE;
public int intValue();
public int hashCode();
public int compareTo(java.lang.Double);
public static int compare(double, double);
public int compareTo(java.lang.Object);
以System.out.println(),
javap -c java.lang.System | grep -i out
public static final java.io.PrintStream out;
public static void setOut(java.io.PrintStream);
4: invokestatic #4 // Method setOut0:(Ljava/io/PrintStream;)V
8: putstatic #98 // Field out:Ljava/io/PrintStream;
然后做javap java.io.PrintStream
【讨论】: