我试图将一个类实例传递给另一个类的构造函数,反之亦然。我想这样做:
static Map map = new Map(hero);
static Hero hero = new Hero(map);
我在我的游戏类中运行这段代码。如何正确地实现上述代码?有什么更好的方法吗?
编辑:
--我想我真正想要的是延迟加载,比如如果map为null,那么就做它;否则,不要加载它。我如何在Java中做到这一点?
发布于 2012-12-06 13:19:04
基本上,我这样做是因为我永远不会在任何其他类中创建一个World类,并且如果需要的话,我的World类会实例化其他类。
谢谢大家的帮助。
发布于 2012-10-20 04:36:03
你可能会通过两阶段初始化来完成。
例如:
static Map map = new Map();
static Hero hero = new Hero();
map.setHero(hero);
hero.setMap(map);
然后在相关函数中添加保护,如果在setMap / setHero之前调用它们,则抛出“未完全初始化”异常。
发布于 2012-10-20 04:41:21
好的,上面的语法不会编译,您会得到一个illegal forward reference
编译错误。
可以做的是构造两个对象,然后设置引用。
static Map map = new Map();
static Hero hero = new Hero();
// and then ...
map.hero(hero);
hero.map(map);
当然,命名setter的方式取决于您自己,如果它们的行为像真正的Java,那么您可能应该坚持这个命名约定(即setX()
和getX()
)。如果在使用该设置程序之前,Map
\ Hero
类不可用,那么可能是建筑商设计模式的情况。
另一种选择是使用一些依赖注入库,它可以在幕后为您处理上面的事情。
第三种选择是使用嵌套类(如果它适合您的设计)。
class Map {
class Hero { ... }
}
这样,每个英雄都可以通过Map.this
获得对Map.this
的引用。
HTH,
埃尔默斯
https://stackoverflow.com/questions/12988456
复制相似问题