用Java创建引用

时间:2009-10-05 01:47:14

标签: java reference

我想使用引用作为数组元素的简写,其中数组由基本类型的元素(整数)组成。如何在Java中显式创建引用?有可能吗?

/* ... */
//neighbors = new int[][]
//I'm using neighbor, below, to refer to an element in neighbors so that the code
//is easier to read. I want it to be a reference so that I can write to it.
int neighbor = neighbors[y][x]; 

if (neighbor == 0)
    btn.setText("");
else
    btn.setText("" + neighbor);

if (btn.isEnabled() == true) {
    numSquaresRevealed++;
    btn.setEnabled(false);
}

//I want neighbor to be a reference so that I can be consistent and use it below
if (changeNeighbors)
    neighbors[y][x] = -1;
/* ... */

4 个答案:

答案 0 :(得分:4)

你可以做的是改变你的逻辑,以便传入邻居[x] [y]并写出你传入的新值。

neighbors[x][y] = setButton(neighbors[x][y]);
private int setButton(int neighbor) {
  btn.setText((neighbor == 0 ? "" : "" + neighbor));

  if (btn.isEnabled() == true) {
        numSquaresRevealed++;
        btn.setEnabled(false);
  }

  //I want neighbor to be a reference so that I can be consistent and use it below
  return (changeNeighbors ? -1 : neighbor);
}

这不使用引用,但它可以做你想要的,这是为了使应用程序更具可读性。

答案 1 :(得分:3)

Java语言和标准库对您没有帮助。相反,我认为你需要手动实现它。一种方法是创建和使用可变的持有者类; e.g。

public class IntHolder {
    private int value;
    public IntHolder(int value) { this.value = value; }
    public int getValue() { return this.value; }
    public void setValue(int value) { this.value = value; }
}

然后使用int[][]替换您的IntHolder[][]声明等。

另一种方法是创建自己的数组引用类; e.g。

public class IntArray2DElement {
    private int[][] array;
    private int x;
    private int y;
    public IntArray2DElement( int[][] array, int x, int y) { 
        this.array = array; this.x = x; this.y = y; }
    public int getValue() { return this.array[x][y]; }
    public void setValue(int value) { this.array[x][y] = value; }
}

然而,围绕这个问题可能会更简单;例如通过明确记住xy值。或者像@James建议的那样。

答案 2 :(得分:1)

从您的问题中不清楚数组的类型是否

Integer[][] neighbors;

int[][] neighbors;

原因是由于Java自动拆箱,这编译很好:

int n = neighbors[x][y];

实际上是

int n = neighbors[x][y].intValue();

在任何情况下,您只能引用非基本类型,因此如果您的数组类型为Integer,则可以执行以下操作:

Integer n = neighbors[x][y];

如果你的数组类型是int [] [],你的'reference'必须包含对数组本身的引用,以及两个索引。

但是,由于Integer是不可变的,即使你有引用它也无法写入它,所以你唯一真正的选择是保持对数组和两个索引的引用。

答案 3 :(得分:1)

与C ++相反,Java仅支持对对象的引用,而不支持对象的成员,而不支持对数组的元素。

(也许是因为它简化了垃圾收集。)

因此,你可以使邻居成为一个完整的对象,或者使用索引为“引用”的数组。