java - 方法中变量重复的目的是什么?

标签 java

我在 Android 代码(以及其他一些代码源)中到处都看到了这个 [below]。它的意义或目的是什么?

class Foo {
    int mBar = 1337;

    static void main(String... args) {
        System.out.println(isFubar());
    }

    boolean isFubar() {
        int ret = mBar; // <--- Focus of attention

        if (ret == 666)
            return true;
        else
            return false;
    }
}

这似乎是在浪费时间和资源。 mBar 显然没有被修改。它没有被修改的风险(在给定的上下文中),那么为什么要复制原语只是为了对其执行非侵入性检查并返回呢?

编辑 Android 源代码中 CellLayout 类的具体示例

public void cellToRect(int cellX, int cellY, int cellHSpan, int cellVSpan, RectF dragRect) {
        final boolean portrait = mPortrait;    <--- Here it is
        final int cellWidth = mCellWidth;
        final int cellHeight = mCellHeight;
        final int widthGap = mWidthGap;
        final int heightGap = mHeightGap;

        final int hStartPadding = portrait ? mShortAxisStartPadding : mLongAxisStartPadding;
        final int vStartPadding = portrait ? mLongAxisStartPadding : mShortAxisStartPadding;

        int width = cellHSpan * cellWidth + ((cellHSpan - 1) * widthGap);
        int height = cellVSpan * cellHeight + ((cellVSpan - 1) * heightGap);

        int x = hStartPadding + cellX * (cellWidth + widthGap);
        int y = vStartPadding + cellY * (cellHeight + heightGap);

        dragRect.set(x, y, x + width, y + height);
    }

最佳答案

也许用于多线程。如果 mPortrait 的值在以下两行之间发生变化,您将得到不同的结果。

final int hStartPadding = mPortrait ? mShortAxisStartPadding : mLongAxisStartPadding;
final int vStartPadding = mPortrait ? mLongAxisStartPadding : mShortAxisStartPadding;

例如:

final int hStartPadding = true ? mShortAxisStartPadding : mLongAxisStartPadding;
// somehwere else: mPortraint = false
final int vStartPadding = false ? mLongAxisStartPadding : mShortAxisStartPadding;

关于java - 方法中变量重复的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8361219/

相关文章:

java - Cassandra一致性(节点离线时)

java - 为什么 PhantomReference 不起作用?

java - JDBI 没有映射器注册

java - 在 Java 中创建对象时重载构造函数 VS 传递 null

java - 如何从编译中排除某些文件

java - 如何从一个 fragment 获取值并将其传递给另一个 fragment

java - 如何使用 svnkit jar java 在 svn 中创建文件夹

java - 在 JDBC 中将值插入 BLOB 类型

java - JTextArea实时输出

java - 在 POJO 外部容器中检索 servlet 上下文、 session 和请求