通过实例变量的Java本地引用

在浏览Stage的libgdx源代码时,我遇到了这样一段:

public void draw () {
    Camera camera = viewport.getCamera();
    camera.update();

    if (!root.isVisible()) return;

    Batch batch = this.batch;
    if (batch != null) {
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        root.draw(batch, 1);
        batch.end();
    }

    if (debug) drawDebug();
}

(在GitHub上的链接)

我感兴趣的是这一行: Batch batch = this.batch;

我的第一个猜测是一些缓存改进。 我是对的,还是有其他原因避免直接使用实例变量?


在Java早期,这是imho有时用作优化,以避免访问成员变量。 但是现在我相信,热点可以优于人类。

然而,在这种情况下,它可能被用来防止在该变量的并发修改的情况下出现问题,因为可能需要在同一个实例上调用begin()end()


这是一段有趣的代码。

一种可能性是确保批处理方法的每个调用都是针对同一个对象的。 如果其他代码在另一个线程上修改this.batch,则一个可能的结果是,某些方法调用将成为Batch对象的一个​​实例,而其余的调用将转到另一个Batch对象实例。

另一种可能性是,一些程序员从其他语言中提取想法和样式(在这种情况下,您必须使用标识符(如“self”)来访问当前实例),在这种情况下,他们可能一直试图避免输入反复批量。

不知道更多关于代码示例,我只能猜测。

链接地址: http://www.djcxy.com/p/24667.html

上一篇: Java Local reference over instance variable

下一篇: Open / Copy a PDF file into iBook