Java 我可以得到一个类的所有方法吗?

Java 我可以得到一个类的所有方法吗?,java,class,methods,Java,Class,Methods,假设我有一个.class文件,我可以直接从源代码获取该类中包含的所有方法吗 然后我将其修改为自包含,不需要命令行中的任何内容。;-) import java.lang.reflect.*; /** 使用以下命令编译: C:\Documents and Settings\glow\My Documents\j>javac DumpMethods.java 像这样运行,结果如下 C:\Documents and Settings\glow\My Documents\j>java转储方法 publi

假设我有一个.class文件,我可以直接从源代码获取该类中包含的所有方法吗 然后我将其修改为自包含,不需要命令行中的任何内容。;-)

import java.lang.reflect.*;
/** 
使用以下命令编译:
C:\Documents and Settings\glow\My Documents\j>javac DumpMethods.java
像这样运行,结果如下
C:\Documents and Settings\glow\My Documents\j>java转储方法
public void DumpMethods.foo()
public int DumpMethods.bar()
public java.lang.String DumpMethods.baz()
公共静态void DumpMethods.main(java.lang.String[])
*/
公共类转储方法{
公共void foo(){}
公共int-bar(){return 12;}
公共字符串baz(){return”“;}
公共静态void main(字符串参数[]){
试一试{
Class thisClass=DumpMethods.Class;
Method[]methods=thisClass.getDeclaredMethods();
for(int i=0;i
您可以使用

了解控制台中使用此语句的所有方法:

javap-cp jar-file.jar packagename.classname

javap class-file.class-packagename.classname

或例如:

javap java.lang.StringBuffer

公共静态方法[]getAccessibleMethods(类clazz){
public static Method[] getAccessibleMethods(Class clazz) {
    List<Method> result = new ArrayList<Method>();
    while (clazz != null) {
        for (Method method : clazz.getDeclaredMethods()) {
            int modifiers = method.getModifiers();
            if (Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers)) {
                result.add(method);
            }
        }
        clazz = clazz.getSuperclass();
    }
    return result.toArray(new Method[result.size()]);
}
列表结果=新建ArrayList(); while(clazz!=null){ for(方法:clazz.getDeclaredMethods()){ int modifiers=method.getModifiers(); if(修饰符.isPublic(修饰符)| |修饰符.isProtected(修饰符)){ 结果:添加(方法); } } clazz=clazz.getSuperclass(); } 返回result.toArray(新方法[result.size()]); }
那么,我将“Class”替换为myClass名称?您可以从命令行
java DumpMethods com.mypackage.myClass
使用它,也可以将
args[0]
替换为
“com.mypackage.myClass”
。如果它使用的是默认软件包,您只需使用
“MyClass”
@Eng I将其编辑为完全独立的。如您所见,DumpMethods类有4个方法(foo、bar、baz和main),它们都在输出中表示。为了好玩,用
“java.util.List”
替换
“DumpMethods”
:-)继承的方法呢?如有必要,请参见此处:使用上述代码,您可以读取类中的所有方法,并将参数作为字符串传递
public static Method[] getAccessibleMethods(Class clazz) {
    List<Method> result = new ArrayList<Method>();
    while (clazz != null) {
        for (Method method : clazz.getDeclaredMethods()) {
            int modifiers = method.getModifiers();
            if (Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers)) {
                result.add(method);
            }
        }
        clazz = clazz.getSuperclass();
    }
    return result.toArray(new Method[result.size()]);
}
package tPoint;

import java.io.File;
import java.lang.reflect.Method;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

public class ReadClasses {

public static void main(String[] args) {

    try {
        Class c = Class.forName("tPoint" + ".Sample");
        Object obj = c.newInstance();
        Document doc = 
        DocumentBuilderFactory.newInstance().newDocumentBuilder()
                .parse(new File("src/datasource.xml"));

        Method[] m = c.getDeclaredMethods();

        for (Method e : m) {
            String mName = e.getName();
            if (mName.startsWith("set")) {
                System.out.println(mName);
                e.invoke(obj, new 
          String(doc.getElementsByTagName(mName).item(0).getTextContent()));
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}