Как я могу извлечь публичные конструкторы, методы и переменные из файла класса [duplicate]

Вы должны фактически определить статический член где-нибудь (после определения класса). Попробуйте следующее:

class Foo { /* ... */ };

const int Foo::MEMBER;

int main() { /* ... */ }

Это должно избавиться от неопределенной ссылки.

37
задан Eng.Fouad 10 March 2011 в 23:10
поделиться

5 ответов

Чтобы узнать обо всех методах, используйте этот оператор в консоли:

javap java.packagename.classname

Пример: javap java.lang.StringBuffer

24
ответ дан Duncan Jones 18 August 2018 в 20:41
поделиться

Вы можете использовать Reflection API

5
ответ дан BullyWiiPlaza 18 August 2018 в 20:41
поделиться

Прямо от источника: http://java.sun.com/developer/technicalArticles/ALT/Reflection/ Затем я изменил его, чтобы быть автономным, не требуя ничего из командной строки. ; -)

import java.lang.reflect.*;

/** 
Compile with this:
C:\Documents and Settings\glow\My Documents\j>javac DumpMethods.java

Run like this, and results follow
C:\Documents and Settings\glow\My Documents\j>java DumpMethods
public void DumpMethods.foo()
public int DumpMethods.bar()
public java.lang.String DumpMethods.baz()
public static void DumpMethods.main(java.lang.String[])
*/

public class DumpMethods {

    public void foo() { }

    public int bar() { return 12; }

    public String baz() { return ""; }

    public static void main(String args[])
    {
        try {
            Class c = DumpMethods.class;
            Method[] m = c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            System.out.println(m[i].toString());
        } catch (Throwable e) {
            System.err.println(e);
        }
    }
}
52
ответ дан DaGardner 18 August 2018 в 20:41
поделиться
  • 1
    Итак, я заменю 'Class' на myClass name? – Eng.Fouad 10 March 2011 в 23:14
  • 2
    Вы использовали бы его из командной строки java DumpMethods com.mypackage.MyClass – corsiKa 10 March 2011 в 23:22
  • 3
    Вы также можете заменить args[0] на "com.mypackage.MyClass". Если он использует пакет по умолчанию, вы можете просто использовать "MyClass". – corsiKa 10 March 2011 в 23:23
  • 4
    @Eng Я отредактировал его полностью автономным. Как видите, класс DumpMethods имеет 4 метода (foo, bar, baz и main), и все они представлены на выходе. Для некоторой забавы замените "DumpMethods" на "java.util.List". :-) – corsiKa 10 March 2011 в 23:27
  • 5
    Как насчет унаследованных методов? См. Здесь, если это необходимо: stackoverflow.com/a/31204747/363573 – Stephan 6 March 2017 в 12:10
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();
    }
}

}
0
ответ дан M Bollojula 18 August 2018 в 20:41
поделиться
  • 1
    Используя вышеприведенный код, вы можете прочитать все методы в классе и передать параметр как строку – M Bollojula 25 May 2018 в 04:20
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()]);
}
6
ответ дан shridutt kothari 18 August 2018 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: