我想使用引用作为数组元素的简写,其中数组由基本类型的元素(整数)组成。如何在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;
/* ... */
答案 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; }
}
然而,围绕这个问题可能会更简单;例如通过明确记住x
和y
值。或者像@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仅支持对对象的引用,而不支持对象的成员,而不支持对数组的元素。
(也许是因为它简化了垃圾收集。)
因此,你可以使邻居成为一个完整的对象,或者使用索引为“引用”的数组。