加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 引用类引用通过类构造

发布时间:2020-12-14 05:33:24 所属栏目:Java 来源:网络整理
导读:我是一个Web开发人员(游戏开发人员作为一个爱好),我已经看到自己使用以下范例几次. (两者都在开发服务器架构和视频游戏开发工作.)看起来真的很丑陋,但我不知道有没有工作.我会在游戏开发中给一个例子,因为这是我最近注意到的地方.这是我一直在努力的RPG.每次
我是一个Web开发人员(游戏开发人员作为一个爱好),我已经看到自己使用以下范例几次. (两者都在开发服务器架构和视频游戏开发工作.)看起来真的很丑陋,但我不知道有没有工作.我会在游戏开发中给一个例子,因为这是我最近注意到的地方.这是我一直在努力的RPG.每次发动战斗时,战斗发动机都将组建战斗人员的双方.每个战斗机设置一个与给定的战斗机相关联的ArtificialIntelligence对象,该战斗机负责指示不接收明确命令的玩家的移动:
public class Combatant {

    ArtificialIntelligence ai = null;

    public Combatant()
    {
        // Set other fields here.

        this.ai = new ArtificialIntelligence(this);
    }

}

这里是我不喜欢的:内部领域(ArtificialIntelligence)在施工期间采取战斗,因为它需要一些战斗领域才能规定适当的行动.所以,为了方便起见,我保留对作为参考的作战人员的引用到ArtificialIntelligence对象,但是该对象包含对ai对象本身的引用!它创建了这个奇怪的递归,但我不知道如何解决它. AI对象需要很多特定于战斗员的领域,所以这就是为什么我在整个对象中传递,但是我不喜欢对象然后包含对包含在上层战斗员中的ai字段的引用字段,它包含在上层的ai类中.这是不好的做法,还是我只是在想呢?

解决方法

虽然这里没有“设计”的问题,但这只是您通过的一个参考 – 一个重要的考虑因素是在将其传递给另一个类之前,应该初始化所有的字段.否则,另一个类将以可能不一致的状态访问此类.这有时被称为让这个“逃脱”从构造函数.

不要这样做

public class BadCombatant {

    ArtificialIntelligence ai = null;
    String someField;

    public BadCombatant() {
        this.ai = new ArtificialIntelligence(this);
        // Don't do this - ArtificialIntelligence constructor saw someField as null
        someField = "something"; 
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读