首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java反向/反向引用

Java反向/反向引用
EN

Stack Overflow用户
提问于 2012-10-20 12:32:26
回答 4查看 854关注 0票数 3

我试图将一个类实例传递给另一个类的构造函数,反之亦然。我想这样做:

代码语言:javascript
代码运行次数:0
运行
复制
static Map map = new Map(hero);
static Hero hero = new Hero(map);

我在我的游戏类中运行这段代码。如何正确地实现上述代码?有什么更好的方法吗?

编辑:

--我想我真正想要的是延迟加载,比如如果map为null,那么就做它;否则,不要加载它。我如何在Java中做到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-06 21:19:04

基本上,我这样做是因为我永远不会在任何其他类中创建一个World类,并且如果需要的话,我的World类会实例化其他类。

谢谢大家的帮助。

票数 0
EN

Stack Overflow用户

发布于 2012-10-20 12:36:03

你可能会通过两阶段初始化来完成。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
static Map map = new Map();
static Hero hero = new Hero();

map.setHero(hero);
hero.setMap(map);

然后在相关函数中添加保护,如果在setMap / setHero之前调用它们,则抛出“未完全初始化”异常。

票数 4
EN

Stack Overflow用户

发布于 2012-10-20 12:41:21

好的,上面的语法不会编译,您会得到一个illegal forward reference编译错误。

可以做的是构造两个对象,然后设置引用。

代码语言:javascript
代码运行次数:0
运行
复制
static Map map = new Map();
static Hero hero = new Hero();
// and then ...
map.hero(hero);
hero.map(map);

当然,命名setter的方式取决于您自己,如果它们的行为像真正的Java,那么您可能应该坚持这个命名约定(即setX()getX())。如果在使用该设置程序之前,Map \ Hero类不可用,那么可能是建筑商设计模式的情况。

另一种选择是使用一些依赖注入库,它可以在幕后为您处理上面的事情。

第三种选择是使用嵌套类(如果它适合您的设计)。

代码语言:javascript
代码运行次数:0
运行
复制
class Map {
    class Hero { ... }
}

这样,每个英雄都可以通过Map.this获得对Map.this的引用。

HTH,

埃尔默斯

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12988456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档