所以情况如下:我创建了一个多人游戏,并且我希望我的朋友......能够为它创建漫游器。所以我要做的是创建一个abstract class Bot{}
,并为机器人定义函数,然后他们必须实现它们:非常简单。获取继承其中一个的第三方类的实例
我卡在哪里,我该如何将它们添加后?你可以使用反射或类似的东西来找到Bot
的所有继承者?或者我需要搜索.jar文件?
直到现在,这里是我是如何做到的(简化,类不是在同一个文件等):
abstract class Bot{
public int play();
//...
}
class Bot1 extends Bot{
@override
public int play(){/*do stuff*/}
//...
}
,然后当我需要在每个机器人之一:
ArrayList<Bot> bots = new ArrayList<>();
bots.add(new Bot1());
//...
我的问题是,如果我要使用这个,因为 instanciation是硬编码的,我需要允许人们修改我的代码来添加他们自己的机器人 - 我不想。
我的问题是,如何在不硬编码的情况下实现这一点?我知道这是可能的,正如Minecraft所做的那样(mods等),但我不知道如何去做。到目前为止,我的研究没有得到任何结果(可能是因为我不知道如何用简单的句子来解释这个问题......),所以欢迎任何提示的线索,以及学习如何去做的地方。
另外,我有OOP和这样的一个很好的理解,但我完全陌生的反射和getClass()
东西...
很多想法在这里:http://stackoverflow.com/questions/492184/how-do-you-find-all-subclasses-of-a-given-class-in-java – dnault
此外:http:///stackoverflow.com/questions/465099/best-way-to-build-a-plugin-system-with-java – dnault
查看工厂设计模式。然后你可以使用'reflection'来加载类。 – ahoxha