【java】Java中-> 是什么意思?
创始人
2024-06-01 10:33:24
0

先看一个例子

EventQueue.invokeLater(() -> {JFrame frame = new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});
// 上面那一段可以看成如下:
EventQueue.invokeLater(new Runnable() {public void run() {JFrame frame = new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}});openItem.addActionListener(Event -> {int result = chooser.showOpenDialog(null);if (result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}});
// 我们可以将lambda表达式转成匿名内部类的样子
openItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int result = chooser.showOpenDialog(null);if (result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}}});

再看一个例子

在《JAVA核心编程》中,有一段这样的代码

import javax.swing.*;
import java.awt.*;
import java.io.File;public class ImageViewer {public static void main(String[] args){EventQueue.invokeLater(() -> {JFrame frame = new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});}
}
class ImageViewerFrame extends JFrame{private JLabel label;private JFileChooser chooser;private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 400;public ImageViewerFrame(){setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);label = new JLabel();add(label);chooser = new JFileChooser();chooser.setCurrentDirectory(new File("."));JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);JMenu menu = new JMenu();menuBar.add(menu);JMenuItem openItem = new JMenuItem("open");menu.add(openItem);openItem.addActionListener(Event -> {int result = chooser.showOpenDialog(null);if (result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}});JMenuItem exitItem = new JMenuItem("exit");menu.add(exitItem);exitItem.addActionListener(Event -> System.exit(0));}
}

可以看到两处这样的代码

() -> {JFrame frame = new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}
Event -> {int result = chooser.showOpenDialog(null);if (result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}

Java8的lambda表达式。就是匿名函数。

上面那一段可以看成如下:

EventQueue.invokeLater(new Runnable() {public void run() {JFrame frame = new ImageViewerFrame();frame.setTitle("ImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}});

下面一段可以看成:

openItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int result = chooser.showOpenDialog(null);if (result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}}});

只不过java自动帮你翻译了一下

Java8 特性:

  1. 在接口中新增了default方法和static方法,这两种方法可以有方法体 (*default方法可以被子接口继承亦可被其实现类所调用,default方法被继承时,可以被子接口覆写;接口中的static方法不能被继承,也不能被实现类调用,只能被自身调用)

  2. Lambda表达式(可以看成是匿名内部类,->表示连接符;{}内部是方法体;<实例>::<实例方法名>返回函数式接口,例如Collections::sort)

  3. 函数式接口(如果一个接口只有一个抽象方法)可以使用Lambda表达式,lambda表达式会被匹配到这个抽象方法上

  4. Lambda作用域(可以直接访问标记了final的外层局部变量,实例的字段以及静态变量,lambda内部对于实例的字段以及静态变量是即可读又可写)

  5. 访问接口的方法:Predicate接口(有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法);Comparator 在Java 8在此之上添加了多种默认方法

  6. Optional 接口(防止NullPointerException异常的辅助类型)

  7. Date api(Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数;LocalTime 本地时间类LocalDate 本地日期类 )

  8. Annotation 注解,8中支持多重注解了

上一篇:let和const与var的区别

下一篇:sql面试题

相关内容

热门资讯

安卓系统的地图怎样下载,下载与... 你有没有发现,现在不管去哪里,手机地图都成了我们的好帮手?尤其是安卓系统的地图,功能强大,用起来超级...
安卓9.0系统挂机游戏,轻松享... 你有没有发现,自从安卓9.0系统更新后,手机里的游戏体验简直就像坐上了火箭!今天,就让我带你一起探索...
安卓系统怎么用迅雷下载,安卓系... 你有没有想过,在安卓系统上下载文件竟然也能这么简单?没错,今天就要来给你揭秘,如何用迅雷在安卓系统上...
安卓手机刷成学生系统,探索全新... 你有没有想过,你的安卓手机其实可以变身成一个充满学习氛围的学生系统呢?没错,就是那种看起来简洁、功能...
ios能迁移安卓系统吗,iOS... 你有没有想过,你的iPhone里的那些宝贝应用,能不能搬到安卓手机上继续使用呢?这可是不少手机用户的...
荣耀10安卓11系统,畅享极致... 你知道吗?最近手机界可是热闹非凡呢!荣耀10这款手机,自从升级到了安卓11系统,简直就像脱胎换骨了一...
安卓系统pc版电脑配置,打造流... 你有没有想过,安卓系统竟然也能在电脑上运行呢?没错,就是那个我们手机上常用的安卓系统,现在也能在PC...
tcllinux系统刷安卓系统... 你有没有想过,你的TCL Linux系统竟然也能升级成安卓系统呢?没错,就是那个我们日常使用的安卓系...
安卓13系统更新蓝牙,蓝牙功能... 你有没有发现,最近你的安卓手机好像变得不一样了?没错,就是那个神秘的安卓13系统更新,它悄悄地来到了...
安卓系统钉钉打开声音,安卓系统... 你有没有遇到过这种情况?手机里装了钉钉,可每次打开它,那声音就“嗖”地一下跳出来,吓你一跳。别急,今...
理想汽车操作系统安卓,基于安卓... 你有没有想过,一辆汽车,除了能带你去你想去的地方,还能像智能手机一样,给你带来智能化的体验呢?没错,...
安卓系统越狱还能升级吗,升级之... 你有没有想过,你的安卓手机越狱后,还能不能愉快地升级系统呢?这可是不少手机爱好者关心的大问题。今天,...
安卓系统蓝牙耳机拼多多,畅享无... 你有没有发现,最近蓝牙耳机在市场上可是火得一塌糊涂呢!尤其是安卓系统的用户,对于蓝牙耳机的要求那可是...
安卓变苹果系统桌面,桌面系统变... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是安卓用户纷纷转向苹果系统桌面。这可不是闹着玩的,这...
鸿蒙系统怎么下安卓,鸿蒙系统下... 你有没有想过,你的手机里那个神秘的鸿蒙系统,竟然也能和安卓世界来一场亲密接触呢?没错,今天就要来揭秘...
手机安卓系统流程排行,便捷操作... 你有没有发现,现在手机的世界里,安卓系统就像是个大舞台,各种版本层出不穷,让人眼花缭乱。今天,就让我...
安卓系统左上角hd,左上角HD... 你有没有发现,每次打开安卓手机,左上角那个小小的HD标识总是默默地在那里,仿佛在诉说着什么?今天,就...
安卓系统软件文件,架构解析与功... 你有没有发现,手机里的安卓系统软件文件就像是一个神秘的宝库,里面藏着无数的宝藏?今天,就让我带你一起...
安卓系统输入法回车,探索安卓输... 你有没有发现,在使用安卓手机的时候,输入法回车键的奇妙之处?它就像是我们指尖的魔法师,轻轻一点,文字...
安卓修改系统时间的软件,轻松掌... 你有没有想过,有时候手机上的时间不对劲,是不是觉得生活节奏都被打乱了?别急,今天就来给你揭秘那些神奇...