2015-12-18 2 views
0

В классе под названием Button У меня есть функция, называемая onClick(). У меня есть 2 экземпляра класса Button. По умолчанию onClick() пуст - (вот определение: public void onClick() {}). В другом классе под названием MainMenuScreen я делаю 2 экземпляра Button, но мне нужен способ изменить тело кнопки onClick() для каждого из них отдельно. Если это невозможно, мне нужен способ взять функцию в качестве параметра в другой функции, например: void function (void param) {}, но я не уверен, что это возможно в любом случае. Если вам нужно увидеть больше моего кода, просто напишите комментарий.Изменение тела функции в экземпляре класса

+0

, пожалуйста, поделитесь ссылкой на него. Также вы используете для этого какой-либо скриптовый язык? – pratikpawar

+0

Нет. Я не использую скриптовый язык, просто Java. Также что такое код ref? –

ответ

1

Расширить классы и переопределить метод. Расширенные классы могут быть определены внутри класса MainMenuScreen:

class OtherButton extends Button { 
     @Override 
     public void onClick(){ 
      //new logic 
     } 
    } 
+0

Похоже, это сработает ... Я попробую! –

1

Пример Педро будет работать идеально для того, что вы делаете. Как халява вот еще несколько способов, которыми вы можете это сделать.

Если Button нужно только определить, что он может сделать, то это должен быть интерфейс и конкретные кнопки его реализовать. Это становится преимуществом при работе с большими приложениями, поскольку позволяет вам отделить ваш код с помощью dependency inversion principle.

public interface Button { 
    public void onClick(); 
} 

public class OtherButton implements Button { 
    @Override 
    public void onClick(){ 
     //new logic 
    } 
} 

Для вашей цели вы должны использовать наследование, как в приведенных выше примерах. Однако вы просили передать функцию в метод, и да, вы можете это сделать. Java 8 делает это довольно легко с lambdas.

public static void main(String[] args) { 

    //Use can put the logic directly in the body of the lambda 
    onClick((Void v) -> {System.out.println("Button Clicked"); return null;}); 

    //Or you can use this to pass another method in 
    onClick((Void v) -> {customOnClick(); return null;}); 
} 

public static void customOnClick() { 
    System.out.println("Button Clicked: customOnClick"); 
} 

public static void onClick(Function<Void, Void> action) { 
    action.apply(null); 
} 

В версиях ниже Java 8 вы можете использовать анонимные функции для передачи функциональности в метод.

public static void main(String[] args) { 

    onClick(new Action() { 
     public void doAction() { 
      System.out.println("Button Clicked"); 
     } 
    }); 
} 

public static void onClick(Action action) { 
    action.doAction(); 
} 

public interface Action { 
    public void doAction(); 
}