我希望不同的对象有不同的方法
例如如何使下面的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");
}
});
答案 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;
});
这是个主意。但请注意,这样的事情几乎无处不在,所以请看一下,例如了解更多信息。