⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freud.java

📁 jbshortcourse
💻 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 + -