Я чувствую, что что-то упускаю, когда речь идет о статически типизированных языках. Когда-то давно я использовал только Perl, и у меня было много способов указать объекту, какую функцию вызывать.
Теперь, когда я на Java, я не понимаю, как я могу сделать что-то подобное простым способом.
У меня есть общий класс Button
. Это подкласс всех фактических кнопок, которые будут использоваться: каждая с другим методом для вызова при нажатии.
Действительно ли нет способа передать ссылку на метод для вызова при нажатии, чтобы я мог использовать один класс для всех кнопок?
В настоящее время я создаю такие кнопки:
// Specifically using the subclass that sets "firemode" to "close"
FiremodeClose fc = new FiremodeClose(Settings.ui_panel_start, Settings.ui_panel_row_firemode, game);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
Это, конечно, вызывает множество подклассов, каждый из которых отличается только размещением, меткой/графикой и вызовом метода. Разумнее сделать что-то подобное:
// Generic button, the method that sets "firemode" is somehow passed as arguement to the contsructor.
Button fc = new Button(&referenceToFunctionToCallWhenClicked, otherArguementsEtc);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
Как я уже сказал, я чувствую, что должен что-то упустить, потому что логично, что должен быть способ добиться этого, что позволит мне обойтись только одним классом Button
без каких-либо подклассов.