我想使用反射來加載一個類的實例。當我嘗試做這件事時,我得到了一個沒有這樣的方法異常。我已檢查並檢查並重新檢查。這個構造器顯然確實存在。有沒有人有任何想法?我已經成功地在另一個基本上相同的代碼項目中使用過這個,所以我不知道我搞砸了哪裏。來源可以在這裏找到:Java NoSuchMethodException獲取構造函數
private void loadCommands() {
try {
for (Class<?> clazz : ReflectionsReplacement.getSubtypesOf(BaseCommand.class, "us.zsugano.itemsave.commands", plugin.getClass().getClassLoader(), BaseCommand.class)) {
BaseCommand baseCommand = null;
try {
baseCommand = (BaseCommand) clazz.getConstructor(ItemSave.class).newInstance(plugin);
if(Listener.class.isAssignableFrom(clazz)) {
plugin.getServer().getPluginManager().registerEvents((Listener) baseCommand, plugin);
}
} catch (Exception e) {
plugin.PluginPM.sendMessage(Level.SEVERE, "Issues encountered when trying to load commands.");
e.printStackTrace();
}
commands.add(baseCommand);
}
} catch (Exception e) {
plugin.PluginPM.sendMessage(Level.SEVERE, "Exception caught while loading commands.");
e.printStackTrace();
}
for (BaseCommand command : commands) {
plugin.getCommand(command.getName().toLowerCase()).setExecutor(this);
}
}
public abstract class BaseCommand {
public ItemSave plugin;
public BaseCommand(ItemSave plugin) {
this.plugin = plugin;
}
全部來源:https://github.com/zachoooo/ItemSave
這裏是堆棧跟蹤:
19:43:10 [SEVERE] [ItemSave] Issues encountered when trying to load commands.
19:43:10 [SEVERE] java.lang.NoSuchMethodException: us.zsugano.itemsave.commands.
StoreCommand.<init>(us.zsugano.itemsave.ItemSave)
19:43:10 [SEVERE] at java.lang.Class.getConstructor0(Unknown Source)
19:43:10 [SEVERE] at java.lang.Class.getConstructor(Unknown Source)
19:43:10 [SEVERE] at us.zsugano.itemsave.commands.CommandManager.loadComma
nds(CommandManager.java:32)
19:43:10 [SEVERE] at us.zsugano.itemsave.commands.CommandManager.<init>(Co
mmandManager.java:23)
19:43:10 [SEVERE] at us.zsugano.itemsave.ItemSave.onEnable(ItemSave.java:1
9)
19:43:10 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlug
in.java:217)
19:43:10 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(
JavaPluginLoader.java:457)
19:43:10 [SEVERE] at org.bukkit.plugin.SimplePluginManager.enablePlugin(Si
mplePluginManager.java:381)
19:43:10 [SEVERE] at org.bukkit.craftbukkit.v1_6_R2.CraftServer.loadPlugin
(CraftServer.java:282)
19:43:10 [SEVERE] at org.bukkit.craftbukkit.v1_6_R2.CraftServer.enablePlug
ins(CraftServer.java:264)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.l(Minecr
aftServer.java:313)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.f(Minecr
aftServer.java:290)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.a(Minecr
aftServer.java:250)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.DedicatedServer.init(Ded
icatedServer.java:151)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.run(Mine
craftServer.java:391)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.ThreadServerApplication.
run(SourceFile:582)
就大膽的想法,但也許嘗試'getDeclaredConstructor',而不是'getConstructor'的情況下,構造函數是不公開的。你也不應該鏈接源代碼,但將其添加到問題。 – Pshemo
這絕對是公開的,我不想在頁面上包含幾個文件的源代碼,這會讓我的問題相當長。我應該這樣做嗎? –
不,你應該把它修剪成一個完整的程序,其中只有幾行代碼可以重現問題。 – Dukeling