Ссылка на объект более одного раза в строке
Поэтому я пишу свою версию тетриса. Вот что я хотел бы сделать:
screen[0][1].setColor(Color.RED);
screen[0][1].setStatus(1);
Есть ли способ сделать это только в одной строке?
4 ответа
На ум приходят несколько вариантов:
Напишите метод в любом классе, который знает как о статусе, так и о цвете:
// Implicitly sets color to red. Consider using an enum for statuses screen[0][1].setStatus(1);
Напишите метод, принимающий параметры состояния и цвета:
screen[0][1].setColorAndStatus(Color.RED, 1);
Делать
setColor
а такжеsetStatus
(и другие сеттеры) returnthis
так что вы можете связать ихscreen[0][1].setColor(Color.RED).setStatus(1);
Откажитесь от идеи "все в одном утверждении" (это то, что, я думаю, вы действительно имели в виду - вы можете поместить два утверждения в одну строку, если вы действительно хотите, но я не предлагаю этого делать) и фактически написать три утверждения:
Tile tile = screen[0][1]; tile.setColor(Color.RED); tile.setStatus(1);
Возможный метод может быть любой, заданный другими:
также попробуйте
(screen[0][1].setColor(Color.RED)).setStatus(1);
Прямые возможности.
- да
если метод setColor возвращает объект типа screen[0][1]
тогда вы можете сделать
screen[0][1].setColor(Color.RED).setStatus(1);
- нет
если возвращаемый метод метода setColor имеет тип void. Тогда единственный способ
screen[0][1].setColor(Color.RED);
screen[0][1].setStatus(1);
Если вы можете редактировать класс, у нас есть много других способов:)
Просто для того, чтобы выполнить это, вы можете изменить методы setColor()
а также setStatus()
возвращать this
, Что-то вроде:
public MyObj setColor(int color) {
this.color = color;
return this;
}
Но я бы не стал этого делать, это не выглядит хорошим шаблоном, если другие методы не следуют тому же подходу.