Java相当于python“dir”?

时间:2011-03-10 05:50:10

标签: java reflection

在python for java中是否有等效的“dir”,或者提供类似功能的库(即对象和类的属性输出为信息性字符串)?

这个问题类似于question对于clojure,可能与Java反射有关,就像在question中一样,这似乎是一个更复杂但相似的主题。

2 个答案:

答案 0 :(得分:4)

标准库中没有任何内容可以完全 完成dir()的内容,但您可以使用java.lang.reflect获取相同的信息。具体而言,在the documentation on discovering class members中解释了调查和发现班级成员的问题。使用该API,您可以轻松找到关于类的属性需要了解的内容。

事实上,自己实现dir()只需要定义一个方法来反省类的方法和字段,并组装信息的集合或打印您想知道的任何信息。

dir()在Java中的用处有限,因为Java不是交互式的,但如果您需要它用于教育/调查目的或应用程序逻辑,那么反射API总是在那里。

答案 1 :(得分:2)

我在想是否使用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