首页新闻找找看学习计划

lambda表达式在addMouseListener中无法使用

0
悬赏园豆:20 [已解决问题] 解决于 2018-03-05 10:00

建立了一个函数接口, 为了使用lambda表达式, 大概是这样

package impl;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

@FunctionalInterface
public interface LambdaMouseListener extends MouseListener {

@Override
default void mousePressed(MouseEvent e) {
}

@Override
default void mouseReleased(MouseEvent e) {
}

@Override
default void mouseEntered(MouseEvent e) {
}

@Override
default void mouseExited(MouseEvent e) {
}

}

 

之后发现, 下面的代码(使用lambda表达式), 里面的方法体执行不成功, 且编译没问题, 且运行没有报错

ml_importQB.addMouseListener((LambdaMouseListener) (e) -> {
  System.out.println("click");
});

但下面的代码(使用匿名内部类的方式)能够成功执行里面的方法体

ml_importQB.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
  System.out.println("click");
  }
});

求教大神, 该如何将lambda表达式运行到addMouseListener上面

逆光影者的主页 逆光影者 | 初学一级 | 园豆:162
提问于:2018-03-01 17:49
< >
分享
最佳答案
1

使用Lambda表达式要求是一个函数式接口,也就是只能有一个抽象方法的接口(可以有默认方法),你的LambdaMouseListener 里面好多个接口,谁知道你的System.out.println("click");这句代码是绑定到哪个方法上的。
当然会出问题,另外能否互相关注一下,好一起交流学习。

收获园豆:20
流年飞雨 | 小虾三级 |园豆:1923 | 2018-03-02 21:37

那么使用addMouseListener的鼠标点击事件该怎么使用lambda表达式呢?

逆光影者 | 园豆:162 (初学一级) | 2018-03-02 21:43

@逆光影者:
自己写一个接口,在mousePressed里面调用,互相关注一下,交流学习,亲测可行,另外想问,为什么
```public interface LambdaMouseListener extends MouseListener
变成了extends而不是implements

流年飞雨 | 园豆:1923 (小虾三级) | 2018-03-02 22:03

说错了,你的都是默认方法,而没有抽象方法

流年飞雨 | 园豆:1923 (小虾三级) | 2018-03-02 22:14

@一座城你说你不懂: 懂了, 我把mousePressed和mouseClicked搞混了

逆光影者 | 园豆:162 (初学一级) | 2018-03-05 10:00
其他回答(1)
1

估计是编译的时候重载错误了吧,你可以使用jd-gui或者在idea中反编译看下编译出来的class文件,估计可以找到线索

2012 | 园豆:18892 (专家六级) | 2018-03-02 08:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册