Вы должны фактически определить статический член где-нибудь (после определения класса). Попробуйте следующее:
class Foo { /* ... */ };
const int Foo::MEMBER;
int main() { /* ... */ }
Это должно избавиться от неопределенной ссылки.
Чтобы узнать обо всех методах, используйте этот оператор в консоли:
javap java.packagename.classname
Пример: javap java.lang.StringBuffer
Прямо от источника: 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);
}
}
}
java DumpMethods com.mypackage.MyClass
– corsiKa
10 March 2011 в 23:22
args[0]
на "com.mypackage.MyClass"
. Если он использует пакет по умолчанию, вы можете просто использовать "MyClass"
.
– corsiKa
10 March 2011 в 23:23
"DumpMethods"
на "java.util.List"
. :-)
– corsiKa
10 March 2011 в 23:27
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();
}
}
}
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()]);
}