📄 freud.java
字号:
import java.io.*;
import java.lang.reflect.*;
public class Freud {
private static String className = "Freud";
private static String getTypeName (Class c) {
if (c.isArray()) {
try {
Class cl = c;
int dimensions = 0;
while (cl.isArray()) {
dimensions++;
cl = cl.getComponentType();
}
StringBuffer sb = new StringBuffer();
sb.append(cl.getName());
for (int i = 0; i < dimensions; i++) {
sb.append("[]");
}
return sb.toString();
} catch (Throwable e) {
// Ignore
}
}
return c.getName();
}
private static void listParameters (PrintWriter pw, Class parameters[]) {
for (int j=0; j< parameters.length; j++) {
pw.print (getTypeName(parameters[j]));
if (j < (parameters.length - 1))
pw.print(", ");
}
}
private static void listClassVariables (PrintWriter pw, Class c) {
String name = c.getName();
// Print the variables
Field fields[] = c.getDeclaredFields();
for (int i=0; i<fields.length;i++) {
if (i == 0)
pw.println (" // Variables");
// Only take those that belong to this class
pw.println (" " + Modifier.toString(fields[i].getModifiers()) +
" " + getTypeName (fields[i].getType()) +
" " + fields[i].getName() + ";");
}
if (fields.length > 0)
pw.println();
}
private static void listClassConstructors (PrintWriter pw, Class c) {
String name = c.getName();
// Print the constructors
Constructor constructors[] = c.getDeclaredConstructors();
for (int i=0; i<constructors.length; i++) {
if (i==0)
pw.println (" // Constructors");
pw.print (" " + Modifier.toString(constructors[i].getModifiers()) +
" " + constructors[i].getName() + "(");
listParameters (pw, constructors[i].getParameterTypes());
pw.println (");");
}
if (constructors.length > 0)
pw.println();
}
private static void listClassMethods (PrintWriter pw, Class c) {
String name = c.getName();
// Print the methods
Method methods[] = c.getDeclaredMethods();
for (int i=0; i<methods.length;i++) {
if (i==0)
pw.println (" // Methods");
pw.print (" " + Modifier.toString(methods[i].getModifiers()) +
" " + getTypeName (methods[i].getReturnType()) +
" " + methods[i].getName() + "(");
listParameters (pw, methods[i].getParameterTypes());
pw.println (");");
}
}
public static void reflectClass (String name, Writer w) {
PrintWriter pw = new PrintWriter (w);
// Get Class instance for name
Class c;
try {
c = Class.forName(name);
} catch (Exception e) {
pw.println ("Class " + name + " is not found.");
return;
}
// Print Declaration
pw.println (Modifier.toString(c.getModifiers()) + " " + c.getName());
// Print Superclass
if (c.getSuperclass() != null)
pw.print (" extends " + c.getSuperclass().getName());
// Print interfaces
Class interfaces[] = c.getInterfaces();
for (int i=0; i<interfaces.length; i++) {
if (i == 0) {
pw.print (" implements ");
} else {
pw.print (", ");
}
pw.print (interfaces[i].getName());
}
pw.println (" {");
listClassVariables (pw, c);
listClassConstructors (pw, c);
listClassMethods (pw, c);
pw.println ("}");
pw.flush();
}
public static void reflectClass (String name, OutputStream os) {
Writer w = new OutputStreamWriter (os);
reflectClass (name, w);
}
private static void inspectSelf () {
reflectClass (className, System.out);
}
public static void main (String args[]) {
if (args.length == 0) {
System.err.println ("Usage: java " + className + " classname [ classname]*\n");
inspectSelf();
} else {
for (int i=0;i<args.length;i++) {
reflectClass (args[i], System.out);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -