当前位置: 首页 > 面试题库 >

Java 8 Lambda表达式-嵌套类中的多个方法呢?

彭阳朔
2023-03-14
问题内容

我在以下位置阅读有关新功能的信息:http : //www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html

我看到了下面的示例:

使用匿名类:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Action Detected");
    }
});

使用Lambda:

button.addActionListener(e -> {
    System.out.println("Action Detected");
});

如果某人MouseListener想要在匿名类中实现多个方法,该怎么办,例如:

public void mousePressed(MouseEvent e) {
    saySomething("Mouse pressed; # of clicks: "
               + e.getClickCount(), e);
}

public void mouseReleased(MouseEvent e) {
    saySomething("Mouse released; # of clicks: "
               + e.getClickCount(), e);
}

… 等等?


问题答案:

你可以通过使用辅助程序接口将多方法接口与lambda一起使用。这适用于这样的侦听器接口,在这些接口中,不需要的方法的实现是微不足道的(即,我们也可以做MouseAdapter提供的事情):

// note the absence of mouseClicked…
interface ClickedListener extends MouseListener
{
    @Override
    public default void mouseEntered(MouseEvent e) {}

    @Override
    public default void mouseExited(MouseEvent e) {}

    @Override
    public default void mousePressed(MouseEvent e) {}

    @Override
    public default void mouseReleased(MouseEvent e) {}
}

你只需要定义一次这样的帮助程序接口。

现在,你可以Component c像这样添加点击事件的侦听器:

c.addMouseListener((ClickedListener)(e)->System.out.println("Clicked !"));


 类似资料:
  • 如果希望在匿名类中实现多个方法,那么使用将如何处理,例如: …等等?

  • 问题内容: 可以说我已经编写了一个函数来评估简单的数学运算,并且在字符串中有一些用户输入,例如:“ 1 + [2 + [3 + 4]]”如何解析这些方括号并首先提取最里面的文本(3 + 4),对其求值,然后解析外部花括号(2 + 7)?我对Regex搜索和替换有基本的了解,但是我知道他们不会像这样进行递归。我想要一些基本的Java代码来执行此操作,如果可以避免的话,还不需要另一个jar / API

  • 我正在为PHPs'编写一个正则表达式函数,以查找包含字符串中所有内容的所有。(在我的例子中,我只有一个if,因为它不是问题的根源。) 以下是到目前为止我得到的信息: 模式: 字符串: 当前输出: 预期输出: 问题是:正则表达式会找到第一个右括号。 我哪里做错了?如何处理嵌套括号? 演示:https://regex101.com/r/SgBqbW/1

  • 是否可以按任意顺序定义嵌套的正则表达式? 以下程序按预期工作: 如果交换前两行,编译器将产生错误。 有没有办法覆盖这个限制(不使用)?

  • 用Java 8 lambdas到处乱搞。为什么当我向接口添加另一个方法时,这会给我一个错误: 不使用第二个方法也能正常工作:“public int getID(String name)

  • 问题内容: 我在某些列中有一个带有嵌套表的oracle表。现在,我需要能够更新每个嵌套表,主表中每个记录中的所有记录。这是如何完成的?我尝试过的任何一种方法,都会收到有关无法在该视图上执行更新或单行子查询返回多个行的错误。 这是一个例子来说明。我可以运行这样的更新: 但是在这种情况下,table子句是在单行的单个嵌套表上执行的。如果您不只是想要等于2的entity.uidn,将如何执行这样的更新?