Ссылка на объект более одного раза в строке

Поэтому я пишу свою версию тетриса. Вот что я хотел бы сделать:

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 (и другие сеттеры) return this так что вы можете связать их

    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;
}

Но я бы не стал этого делать, это не выглядит хорошим шаблоном, если другие методы не следуют тому же подходу.

Другие вопросы по тегам