java - 创建该对象的新实例时滚动浏览对象

标签 java object selection instanceof

在我的游戏中,当按下鼠标右键时,您将在地面上放置一个物体。所有对象都有相同的父类(super class)(GameObject)。 我有一个名为 selected 的字段,它一次等于一个特定的游戏对象。 单击鼠标右键时,它会检查所选的实例是什么以及它如何确定将哪个对象放置在地面上。代码示例: t 是对象将进入的“槽”。

if (selected instanceof MapleTree) {
    t = new MapleTree(game,highLight);
} else if (selected instanceof OakTree) {
        t = new OakTree(game,highLight);
}

现在它必须是对象的"new"实例。最终我的游戏将有数百个游戏对象,我不想有一个巨大的 if else 语句。我将如何制作它,以便它滚动可能的对象类型,如果它的类型正确,则创建它的新实例......?

当按 E 时,将切换所选类型,并且也是一个 if else 语句。我也要做这个怎么办?这是一个代码示例:

if (selected instanceof MapleTree) {
        selected = new OakTree(game);
} else if (selected instanceof OakTree) {
    selected = new MapleTree(game);
}

最佳答案

听起来你很适合使用 Prototype .

或者

如果您想坚持使用显式路由,可以使用工厂方法的 HashMap。

或者

如果你想隐式和自动,你可以使用反射来操作实例的类并检索然后调用的构造函数: http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html

或者

上述一些方法的混合是确保每个类也实现一个静态(或非)工厂方法,例如 getInstance() ,然后当您拥有该对象时匹配您可以直接在该对象上调用该工厂方法(或在其类上以保持静态静态)。这有点自动,但仍然更容易遵循。

关于java - 创建该对象的新实例时滚动浏览对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611589/

相关文章:

java - 不同的map有相同的hashcode

php - empty() 在对象的非空属性上返回 TRUE

Java创建多个对象

javascript - 为什么对象方法不返回值?

python - PyQT - 如何获取图像选择的坐标

powershell - 将PowerTime从Powershell转换为可用的方式,但无法使其正常工作

java - 在 Junit 测试中打印出方法的输出

java - 泛型方法返回值到方法和赋值的不同行为

wpf - 在mvvm中选择与相关数据模板有关的usercontrol

java - 如何让我的 webdav 客户端/服务器运行得更快?