Если вам действительно нужно что-то, что ведет себя как ссылка на примитив, вам нужно создать объект, содержащий это примитивное значение, а затем разделить объект "holder".
Однако я не думаю, что это лучший способ решить вашу проблему.
Насколько я понимаю, ваши игровые объекты могут быть полностью описаны с помощью переменных x
, y
, height
и width
. left
, top
, right
и bottom
, с другой стороны, являются значениями, которые могут быть получены из четырех основных.
На самом деле можно было бы иметь игровой объект, содержащий только x
, y
, height
и width
, и вычислять другие четыре значения вне объекта всякий раз, когда они необходимы. Такой объект может выглядеть так:
public class GameObject {
private int x, y, height, width;
public int getX() { return x; }
public int getY() { return y; }
public int getHeight() { return height; }
public int getWidth() { return width; }
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
public void setHeight(int height) { this.height = height; }
public void setwidth(int width) { this.width = width; }
}
Обратите внимание, что фактические переменные private
и доступны для чтения только через геттеры. Это помогает избежать использования ссылки на переменную в дальнейшем.
Теперь, чтобы иметь простой и уникальный способ доступа к left
, top
, right
и bottom
, в то время как вы могли бы добавить четыре переменные и синхронизировать их с четыре другие переменные уже присутствуют, я думаю, что это не лучший способ сделать это.
Я предлагаю вам просто вычислять их на лету внутри немного умнее, чем в среднем, геттеров. Это будет выглядеть так:
public class GameObject {
// getters and setters omitted for brevity
private int x, y, height, width;
public int getLeft() {
return x;
}
public int getRight() {
// assuming x increase toward the right
return x + width;
}
public int getTop() {
return y
}
public int getBottom() {
// assuming y increas toward the bottom
return y + height;
}
}
Это также поможет, если вам нужно создать некоторые специальные методы обновления, такие как moveRight(int delta)
, scale(double factor)
, поскольку вам нужно будет применять изменения только к базовым переменным, а не к значениям, производным от них.