我在JPanel上有一个文本字段,这个文本字段上有一个文档侦听器。由于文档侦听器包含三个方法(removeUpdate,insertUpdate,changeUpdate),所以如何使用Lambda表达式调用特定方法。
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
button.setText(field.getText());
}
@Override
public void changedUpdate(DocumentEvent arg0) {
}
});
如何使用像field.getDocument()这样的Lambda表达式调用此文档侦听器insertUpdate方法。AddDocumentListener(Lambda表达式);
为了使lambda充当特定接口
的实例,该接口
必须具有单个抽象方法。
DocumentListener
有3个Abstract
方法,因此您需要创建一个SMI,扩展DocumentListener
:
interface InsertListener extends DocumentListener {
@Override
default void removeUpdate(DocumentEvent e) {
}
@Override
default void changedUpdate(DocumentEvent e) {
}
}
现在您可以使用lambda表达式创建InsertListener
的实例:
final InsertListener is = e -> button.setText(field.getText());
您可以将其传递到一个方法中:
field.getDocument().addDocumentListener(is);
例如,您还可以创建一个接口
如下所示:
interface InsertListener extends DocumentListener {
void onEvent(DocumentEvent.EventType type, DocumentEvent e);
@Override
default void insertUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void removeUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
@Override
default void changedUpdate(DocumentEvent e) {
onEvent(e.getType(), e);
}
}
final InsertListener is = (t, e) -> {
if (t == DocumentEvent.EventType.INSERT) {
button.setText(field.getText());
}
};
问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除
问题内容: 最近,我遇到了一个神秘的问题,在Android项目,我描述了这里。我以某种方式解决了问题,但仍然不知道其背后的确切原因。 假设我想在内部类中调用函数foo()。问题是,直接调用它有什么区别 或使用外部类实例对其进行调用 此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激。非常感谢。 PS:我在某处读到,非静态内部类将始终持有外部类的实例。因此,
问题内容: 好的,所以我知道匿名内部类正在隐式扩展父类或实现接口,因此将需要调用超类的构造函数。但是,我不确定如何为匿名类创建一个构造函数(如果可能的话),并且在没有定义构造函数的情况下,我不确定如何对super()进行调用!这是我的练习代码: 我担心的是,如果您尝试从没有no- arg构造函数的类中创建一个匿名类,则该代码将在编译时失败,因为无法将参数传递给超构造函数。这是一个有效的问题吗?如果
在以下片段中: 有没有办法从内部匿名类引用匿名类的外部实例? 第二个错误是在解决方案上,我在这里找到了一个匿名内部类的外部类的关键字。这些问题似乎共享一些概念和问题空间,但性质不同。
我有一个正在测试的类,其中包含一个具有内部匿名类的方法。匿名类中的一个方法调用了被测试类中的一个方法,但Mockito似乎没有意识到这一点。 我的测试代码: 出于某种我似乎无法弄清楚的原因,Mockito无法检测到正在调用outerMethod(),尽管我已经通过在调试器中逐行手动验证。我还验证了对依赖对象的调用返回具有正确内容的正确可观察对象,并且确实调用了on完成()和outerMethod(