Java: имя класса в скобках при создании экземпляра объекта - PullRequest
1 голос
/ 31 мая 2011

В коде Java:

// Define ActionListener

ActionListener actionListener = new ActionListener() {

public void actionPerformed(ActionEvent actionEvent) {

        JButton button = **(JButton)actionEvent.getSource();**
        int red = random.nextInt(255);
        int green = random.nextInt(255);
        int blue = random.nextInt(255);
        button.setBackground(new Color(red, green, blue));

    }
};

Что делает выделенный (между ** и **) код?

Мне очень трудно исследовать предметпоскольку я не знаю, какие поисковые термины использовать.: o

Надеюсь, кто-нибудь может помочь.ТИА

Ответы [ 5 ]

6 голосов
/ 31 мая 2011

Это приведение объекта, возвращенного actionEvent.getSource() к JButton.

Вы можете прочитать некоторую информацию по здесь и здесь.

0 голосов
/ 31 мая 2011

Это называется класс "кастинг".actionEvent.getSource () может возвращать что угодно не только JButton, но и другие виджеты.Поэтому они решили «давайте вернем Object, потому что там все вписывается, и пусть разработчик расскажет java, чего он ожидает», поставив перед ним (JButton), который вы говорите: «Я уверен, что источником события action является JButton, и я хочучтобы получить доступ как JButton "

0 голосов
/ 31 мая 2011

Интересной вещью является (JButton), который называется cast . Вы можете использовать приведение, если вы абсолютно уверены, что заданный вам объект класса A (далее называемый «foo») действительно является экземпляром класса B, тогда вы можете просто написать

B bar = (B) foo;

и затем используйте переменную bar, как вам нравится. Но учтите, что если foo на самом деле не является экземпляром B, среда выполнения выдаст ClassCastException. Вам также может быть интересно прочитать ключевое слово instanceof .

0 голосов
/ 31 мая 2011

Объект ActionEvent представляет действие пользователя. Согласно вашему коду, это действие было выполнено на JButton. Этот объект имеет метод getSource (), который отправляет обратно объект, который вызвал событие. Однако, поскольку все может отправлять такие события, getSource () отправляет обратно нетипизированный объект. Вам нужно привести его обратно к исходному типу (Jbutton), чтобы иметь возможность использовать этот источник (в этом случае установите его фон).

Чек http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

0 голосов
/ 31 мая 2011

Он получает источник вашего действия, который он принимает за JButton, и переводит источник вашего действия в класс JButton.

...