正如@DNA之前回答的那樣,您總是需要一個完全合格的類名。然後是反思,這兩者都非常緩慢,並且需要全力應對。以番石榴爲例,你可以做這樣的事情:
public static void main(String[] args) throws Exception {
String myClassName = "App";
String methodName = "method";
Object[] params = {};
ClassPath cp = ClassPath.from(ClassLoader.getSystemClassLoader());
ImmutableSet<ClassPath.ClassInfo> cls = cp.getTopLevelClasses();
for (ClassPath.ClassInfo cl : cls) {
if(cl.getSimpleName().equals(myClassName)) {
Class<?> clazz = cl.load();
for (Method m : clazz.getMethods()) {
if(m.getName().equals(methodName)) {
Object instance = clazz.newInstance();
// invoke method - prints Hello
m.invoke(instance, params);
}
}
}
}
}
public void method() {
System.out.println("Hello!!!");
}
非常殘暴。拋出很多例外,你必須處理。如果你有一個更大的項目,使用這樣的東西將需要很長時間。
來源
2013-12-18 01:56:22
awb
不,你需要完整的類名。否則,無法確定您想要的類別方法。 –
同時檢查參與反射的各種類型的javadoc,即'Class'和'Method'。除非該方法是'static',否則您需要該類的一個實例來調用該方法。 –