Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指定构造函数,稍后初始化(Java)_Java_Game Engine - Fatal编程技术网

指定构造函数,稍后初始化(Java)

指定构造函数,稍后初始化(Java),java,game-engine,Java,Game Engine,我目前正在用Java为android创建一个2D游戏引擎。引擎基本上是一个实体组件系统。首先创建一个蓝图(id的包装器),可以将组件类型与之关联。您可以稍后“构建”蓝图。这意味着与蓝图关联的每个类型的对象都将被初始化并放入更新循环中。返回一个实体(也是int-id的包装器),您可以使用该实体访问组件 当添加组件时,没有初始化任何对象,这意味着我当时无法提供构造函数,这就是我想以某种方式解决的问题 这是我当前将组件类型与蓝图关联的方式: public <T extends Component

我目前正在用Java为android创建一个2D游戏引擎。引擎基本上是一个实体组件系统。首先创建一个蓝图(id的包装器),可以将组件类型与之关联。您可以稍后“构建”蓝图。这意味着与蓝图关联的每个类型的对象都将被初始化并放入更新循环中。返回一个实体(也是int-id的包装器),您可以使用该实体访问组件

当添加组件时,没有初始化任何对象,这意味着我当时无法提供构造函数,这就是我想以某种方式解决的问题

这是我当前将组件类型与蓝图关联的方式:

public <T extends Component> void addComponent(BluePrint bluePrint, Class<T> type) {
    bluePrintMap.get(bluePrint.getId()).add(type);
}
public void addComponent(蓝图,类类型){
bluePrintMap.get(bluePrint.getId()).add(type);
}
我想返回一个方法引用,或者只是将构造函数参数作为参数提供给addComponent,并将它们存储起来供以后使用。我不知道如何解决这个问题,因为我甚至事先不知道构造函数参数的长度。任何输入都会被通知

编辑:
一个可能的解决方案是实际创建一个组件实例,然后在用户决定构建蓝图时创建一个副本,但这会给我带来一些其他问题。

最后我使用了我在编辑中提供的解决方案,到目前为止它似乎工作得很好,而且我还获得了很好的类型安全性。缺点是
如果我想让用户在创建脚本组件时更容易,我认为引擎必须使用序列化执行复制,这有点慢

最后,我使用了我在编辑中提供的解决方案,到目前为止它似乎工作得很好,而且我还获得了很好的类型安全性。缺点是
如果我想让用户在创建脚本组件时更容易,我认为引擎必须使用序列化执行复制,这有点慢

1)一般方法可行。2) “我甚至不知道有多少个参数”的问题可以通过使用参数数量可变的方法(请参阅)或通过传入
集合
或数组对象来解决。@StephenC谢谢你给我指明了正确的方向。我不确定我是否明白你的问题,但是,你能不能传入一个
供应商
,它将作为一个工厂,在创建组件时会被调用?@DavidConrad感谢您的输入,我的想法是,在创建组件时,我已经保存了指定如何创建组件的信息。创建对象时,只向已映射到构造函数数据的方法提供id。1)常规方法可以工作。2) “我甚至不知道有多少个参数”的问题可以通过使用参数数量可变的方法(请参阅)或通过传入
集合
或数组对象来解决。@StephenC谢谢你给我指明了正确的方向。我不确定我是否明白你的问题,但是,你能不能传入一个
供应商
,它将作为一个工厂,在创建组件时会被调用?@DavidConrad感谢您的输入,我的想法是,在创建组件时,我已经保存了指定如何创建组件的信息。创建对象时,只向已映射到构造函数数据的方法提供id。