JAVA: 不同的对象有不同的方法

JAVA: Different objects with different methods

我希望不同的对象有不同的方法

例如,如何使以下 java 伪代码起作用?

Button b[] = new Button[5];
button[0].onClick = new method(arguments){
    Log.i("a", "button0");
    return true;
}
button[1].onClick = new method(arguments){
    Log.i("a", "button1");
    return false;
}


button[1].onClick(123);

UPD1: 伙计们,下面是我在互联网上找到的代码怎么样。如何让这个Button class 和类似setOnClickListener 的函数写出来? PS:按钮是我自己的 class,它不是从默认库中获取的。

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        Log.i("a", "Yohoho");
    }
});

你不能完全做到这一点,但你可以有:

button.addClickHandler(clickHandler);

其中 clickHandler 实际上可以是实现某些 ClickHandler 接口的 lambda 表达式。

Button class 本身将负责在正确的时间调用该处理程序,例如您可以调用 button.click(),它会为您调用处理程序。

让我们为 Jon Skeet 编写的内容添加一些代码。从概念上讲,您的 onClick 实例变量应该是对实现 ClickHandler 接口的对象的引用。我们就根据你写的来定义这样一个接口吧

interface ClickHandler {
    public boolean click(Object[] arguments);
}

现在您的 Button class 需要一个 ClickHandler 的引用,一个设置一个的方法,一个调用一个的方法。因此,原型按钮将如下所示:

class Button {
    private ClickHandler onClick;
    public void addClickHandler(ClickHandler clickHandler) {
        onClick = clickHandler;
    }
    public boolean click(Object[] arguments) {
        onClick.click(arguments);
    }
}

现在 ClickHandler 是一个功能接口(在 Java 8 个术语中),所以当你有一个 Button 实例时,你可以 addClickHandler 使用匿名 class 或 lambda

Button b = new Button();

// java 7
b.addClickHandler(new ClickHandler() {
    @Override
    public boolean click(Object[] argument) {
        Log.i("a", "button0");
        return true;
    }
});

// java 8
b.addClickHandler(args -> {
    Log.i("a", "button0");
    return true;
});

就是这个想法。但请注意,类似的东西几乎无处不在,所以看看例如。摇摆以了解更多信息。