如何在类中获取方法

时间:2014-07-23 13:21:00

标签: java

所以我正在为游戏开发一个插件加载器,它的作用是从文件夹中的class加载插件(.jar对象),然后将它们添加到{{ 1}}(所以用户可以制作自己的mod)。但是我的java经验并不是最好的:/到目前为止,它获取了ArrayList中的类,但我需要检查类中的方法(例如标记的构造函数)。或者,如果有人知道更好的方法来做到这一点。任何帮助将不胜感激。

jar

Plugin.java

package me.rigamortis.faurax.plugin; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import net.minecraft.client.Minecraft; import me.rigamortis.faurax.core.Core; public class Plugin { public Minecraft mc = Minecraft.getMinecraft(); final File folder = new File(mc.mcDataDir + File.separator + "Faurax/Plugins"); public String jar; public static String className; private String name; private String desc; private int color; private int key; public Plugin() { if(!folder.exists()) folder.mkdirs(); loadPlugins(folder); if(folder != null) getClassNames(folder); } public void setName(String newName) { name = newName; } public void setDesc(String newDesc) { desc = newDesc; } public void setColor(int newColor) { color = newColor; } public void setKey(int newKey) { key = newKey; } public String getName() { return this.name; } public String getDesc() { return this.desc; } public int getKey() { return this.key; } public int getColor() { return this.color; } /** * A hook for plugins */ public void onTick() {} public void loadPlugins(final File folder) { try{ for (final File fileEntry : folder.listFiles()) { if ( !fileEntry.isDirectory()) { if(fileEntry.getName().endsWith(".jar")){ jar = fileEntry.getName(); Core.logNormal("Loading " + fileEntry.getName()); } } } } catch(Exception e) { Core.logError("Error? jar isin't a plugin."); e.printStackTrace(); } } public void getClassNames(final File dir) { try{ ZipInputStream zip = new ZipInputStream(new FileInputStream(dir + File.seperator + jar)); for(ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) if(entry.getName().endsWith(".class") && !entry.isDirectory()) { Core.logNormal("Found "+entry); className = entry.toString(); } } catch(IOException e){ e.printStackTrace(); } } }

PluginLoader.java

1 个答案:

答案 0 :(得分:0)

我不久前回答了类似的问题。这是从给定类中获取所有方法的代码,我认为这是相当不言自明的:

void foo(Object o)
{
    Class<?> c = o.getClass();
    for (Method m : c.getDeclaredMethods())
    {
        //do whatever
    }
}

这利用了Java的Reflection API。您可以阅读更多相关信息here