JAVA8学习
1.Lambda 表达式
- 在java8之前,我们无法将行数作为参数传递给一个方法,也无法声明返回一个函数的方法
- 在JavaScript中,函数参数是一个函数,返回值是另一个函数的情况非常常见;JavaScript是一门非常典型的函数式语言;
JavaScript回调函数写法
a.execute(callback(event){
event......
})//在java8之前,我们是不可能在java8中见到类似这种写法
Java匿名内部类写法
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button fistButton = (Button)findViewById(R.id.first);
Button secondButton = (Button)findViewById(R.id.second);
fistButton.setOnClickListener(new View.OnclickListener(){
@Override
public void OnClick(View v){
geToFistActivity();
}
})
seconButton.setOnClickListener(new View.OnclickListener(){
@Override
public void OnClick(View v){
geToSecondActivity();
}
})
}
可以看出,在实现匿名内部类中,需要写太多重复代码,视觉上给人带来就是臃肿的代码
1.1 Lambda 表达式的应用:
java8之前方法函数依赖于对象而存在,java8后函数作为一等公民了
在将函数作为一等公民的语言中,Lambda表达式的类型是函数,但在Java中,Lambda表达式是对象,他们必须依附于一类特别的对象类型----函数式接口(function interface)
基本结构:(type param1,type param2, type param3) -> {body}
(param1, param2) -> {body}
param -> {body}
() -> {body}
() -> sout
(o1, o2) -> o2.compareTo(o1)
上面swing例子改装:
jButton.addActionListener(e -> System.out.println("Button Pressed "));
jFrame.add(jButton);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);