JAVA:使用不同方法的不同对象

时间:2015-01-22 20:03:25

标签: java 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类和write函数类似于setOnClickListener? PS:Button是我自己的类,它不是从默认的库中获取的。

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

2 个答案:

答案 0 :(得分:1)

你不能完全这样做,但你可以

button.addClickHandler(clickHandler);

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

Button类本身将负责在正确的时间调用该处理程序,例如你可以打电话给button.click()并为你调用处理程序。

答案 1 :(得分:0)

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

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

现在,您的Button类需要对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使用匿名类或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;
});

这是个主意。但请注意,这样的事情几乎无处不在,所以请看一下,例如了解更多信息。