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;
});
就是这个想法。但请注意,类似的东西几乎无处不在,所以看看例如。摇摆以了解更多信息。
我希望不同的对象有不同的方法
例如,如何使以下 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;
});
就是这个想法。但请注意,类似的东西几乎无处不在,所以看看例如。摇摆以了解更多信息。