Вы можете вернуть только одно значение, но вы можете сделать это значение массивом. Например:
private GObject[] getCollidingObjects() {
GObject[] ret = new GObject[2];
ret[0] = ...;
ret[1] = ...;
return ret;
}
Кстати, когда вы начинаете многократное использование одного и того же выражения в одном и том же методе, вам следует подумать о введении локальной переменной для ясности. Например, рассмотрите это вместо своего исходного кода:
private GObject getCollidingObject(){
int x = ball.getX();
int y = ball.getY();
if (getElementAt(x, y) != null) {
return getElementAt(x, y);
}
if (getElementAt(x + BALL_RADIUS * 2, y) != null) {
return getElementAt(x + BALL_RADIUS * 2, y);
}
if (getElementAt(x, y + BALL_RADIUS * 2) != null) {
return getElementAt(x, y + BALL_RADIUS * 2);
}
if (getElementAt(x + BALL_RADIUS * 2, y + BALL_RADIUS * 2) != null) {
return getElementAt(x + BALL_RADIUS * 2, y + BALL_RADIUS * 2);
}
return null;
}
(Вы можете сделать то же самое для x + BALL_RADIUS * 2
и y + BALL_RADIUS * 2
.)
Вы также можете рассмотреть что-то вроде этого:
private GObject getCollidingObject(){
int x = ball.getX();
int y = ball.getY();
return getFirstNonNull(getElementAt(x, y),
getElementAt(x + BALL_RADIUS * 2, y),
getElementAt(x, y + BALL_RADIUS * 2),
getElementAt(x + BALL_RADIUS * 2, y + BALL_RADIUS * 2));
}
private static getFirstNonNull(GObject... objects) {
for (GObject x : objects) {
if (x != null) {
return x;
}
}
return null;
}
(В C # есть лучший способ сделать это с помощью оператора объединения нулей, но не берите в голову ...)