Я чувствую, что мне что-то не хватает, когда речь заходит о статически типизированных языках. Когда я в значительной степени использовал 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);
Это конечно couses множество подклассов, каждый из которых отличаясь только размещения, этикетки/графики и вызова метода. Это имеет смысл делать что-то похожее на это:
// 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
без каких-либо подклассов.
Для этого нужен интерфейс. Java 8 и Groovy создают встроенные интерфейсные реализации для таких случаев, как это просто. – chrylis
^^^ Это и посмотреть также анонимные классы. –
@chrylis Если это то, для чего нужны интерфейсы, тогда я, должно быть, использовал их для чего-то другого, кроме их намеченной цели. Мне бы хотелось увидеть ответ, содержащий некоторые примеры кода для этого. – Jarmund