更改 class 实例中的函数体
Changing the body of a function in an instance of a class
在一个名为 Button
的 class 中,我有一个名为 onClick()
的函数。我有 2 个 Button
class 实例。默认情况下,onClick()
为空 -(这里是定义:public void onClick () {}
)。在另一个名为 MainMenuScreen
的 class 中,我制作了 Button
的 2 个实例,但我需要一种方法来分别更改每个实例的 onClick()
按钮的主体。如果那不可能,我需要一种方法将一个函数作为另一个函数的参数,如下所示:void function (void param) {}
但我不确定这是否可行。如果您需要查看我的更多代码,请发表评论。
扩展 classes 并覆盖该方法。可以在 MainMenuScreen 中定义扩展的 classes class:
class OtherButton extends Button {
@Override
public void onClick(){
//new logic
}
}
Pedro 的示例非常适合您正在做的事情。作为免费赠品,您可以通过以下几种方式完成此任务。
如果 Button 只需要定义它可以做什么,那么它应该是一个接口,并让特定的 Buttons 实现它。这在处理大型应用程序时成为一个优势,因为它允许您使用 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);
}
在 Java8 以下的版本中,您可以使用匿名函数将功能传递给方法。
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();
}
在一个名为 Button
的 class 中,我有一个名为 onClick()
的函数。我有 2 个 Button
class 实例。默认情况下,onClick()
为空 -(这里是定义:public void onClick () {}
)。在另一个名为 MainMenuScreen
的 class 中,我制作了 Button
的 2 个实例,但我需要一种方法来分别更改每个实例的 onClick()
按钮的主体。如果那不可能,我需要一种方法将一个函数作为另一个函数的参数,如下所示:void function (void param) {}
但我不确定这是否可行。如果您需要查看我的更多代码,请发表评论。
扩展 classes 并覆盖该方法。可以在 MainMenuScreen 中定义扩展的 classes class:
class OtherButton extends Button {
@Override
public void onClick(){
//new logic
}
}
Pedro 的示例非常适合您正在做的事情。作为免费赠品,您可以通过以下几种方式完成此任务。
如果 Button 只需要定义它可以做什么,那么它应该是一个接口,并让特定的 Buttons 实现它。这在处理大型应用程序时成为一个优势,因为它允许您使用 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);
}
在 Java8 以下的版本中,您可以使用匿名函数将功能传递给方法。
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();
}