在java中,我正在为我正在开发的软件开发一个API,它允许人们自己扩展软件。现在,我正在使用一个事件系统,这很好。我试图使用.class来获取所需的参数类型,以便函数运行。是否有任何代码可用于从构造函数中获取变量(例如,具有类目录的字符串)然后创建它以便我可以使用.class?我很想知道!
注意:如果某些变量或构造函数看起来不像来自java,那可能是因为它们是我正在处理的API的一部分。
这是我的代码:
private void throwEvent() {
PSLPE = new PocketServerListPingEvent(this, Packet.getAddress(), Packet.getPort(), ServerSettings.getPEMOTD());
ArrayList<Class<?>> Listeners = PluginManager.getListeners();
for(int i = 0; i < Listeners.size(); i++) {
Method[] MethodList = Listeners.get(i).getMethods();
for(int j = 0; j < MethodList.length; j++) {
if(MethodList[j].isAnnotationPresent(EventHandler.class)) {
if(MethodList[j].getParameters()[0].getType().equals(PocketServerListPingEvent.class)) {
try {
Class<?> EventClass = Class.forName(Listeners.get(i).getName());
Constructor<?>[] EventCtorList = EventClass.getConstructors();
for(int k = 0; k < EventCtorList.length; k++) {
Constructor<?> ctor = EventClass.getConstructor(Class.forName(EventClass.getConstructors()[k].getParameters()[0].getType().toString().substring(6)));
Object EventObject = ctor.newInstance(EventClass.getConstructors()[k].getParameters()[0].getType());
Method EventMethod = EventObject.getClass().getMethod(MethodList[j].getName(), PocketServerListPingEvent.class);
EventMethod.invoke(EventObject, PSLPE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
答案 0 :(得分:1)
您正在寻找Class.forName
。
它返回具有给定名称的类的Class
对象,或者如果没有这样的类则抛出异常。例如:
Class<?> chillyDogsClass = Class.forName("net.codeguys.ChillyDogs");
或
String className = new Scanner(System.in).readLine();
try {
Class<?> unknownClass = Class.forName(className);
System.out.println("Successfully found " + unknownClass.toString());
} catch(ClassNotFoundException e) {
System.out.println(className+" doesn't exist!");
}