作者:昙檀禅潺_162 | 来源:互联网 | 2023-09-24 20:52
一、Java8对接口做了进一步的增强。(默认方法和静态方法)a.在接口中可以添加使用default关键字修饰的非抽象方法。即:默认方法(或扩展方法不用被实现)如:comparator接口
一、Java 8 对接口做了进一步的增强。(默认方法和静态方法)
a. 在接口中可以添加使用 default 关键字修饰的非抽象方法。即:默认方法(或扩展方法不用被实现)如:comparator接口。Iterable接口中的forEach默认方法。
b. 接口里可以声明静态方法,并且可以实现。如:comparator接口。Collections.sort(), max(), min() 等方法;
Java8内部类访问外部变量不需要加final修饰。
二、Java8新增list.forEach遍历(Lambda表达表达式,代替匿名内部类)
遍历方式:
1
2
3
4
5
6
|
list.forEach(
new
Consumer() {
@Override
public
void
accept(String s) {
System.out.println(s);
}
});
|
1
2
3
4
5
|
Lambda表达式:
list.forEach(s ->{
System.out.println(s);
}
);
|
函数作为参数传递进方法中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
TestJava8 tester =
new
TestJava8();
MathOperation addition = (
int
a,
int
b) -> a + b;
MathOperation subtraction = (a, b) -> a - b;
MathOperation multiplication = (
int
a,
int
b) -> {
return
a * b; };
MathOperation division = (
int
a,
int
b) -> a / b;
System.out.println(
"10 + 5 = "
+ tester.operate(
10
,
5
, addition));
System.out.println(
"10 - 5 = "
+ tester.operate(
10
,
5
, subtraction));
System.out.println(
"10 x 5 = "
+ tester.operate(
10
,
5
, multiplication));
System.out.println(
"10 / 5 = "
+ tester.operate(
10
,
5
, division));
}
interface
MathOperation {
int
operation(
int
a,
int
b);
}
private
int
operate(
int
a,
int
b, MathOperation mathOperation){
return
mathOperation.operation(a, b);
}
|
三、可以使用重复注解
1
2
3
4
|
@Filter
(
"filter1"
)
@Filter
(
"filter2"
)
public
interface
Filterable {
}
|
四、新的Date/Time ApI
LocalDate,LocalTime,Clock类;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
final
Clock clock = Clock.systemUTC();
System.out.println( clock.instant() );
System.out.println( clock.millis());
final
LocalDate date = LocalDate.now();
final
LocalDate dateFromClock = LocalDate.now( clock );
System.out.println( date );
System.out.println( dateFromClock );
final
LocalTime time = LocalTime.now();
final
LocalTime timeFromClock = LocalTime.now( clock );
System.out.println( time );
System.out.println( timeFromClock );
|
五、函数式接口
1、函数式接口(Functional Interface)是只包含一个方法的抽象接口;
2、函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。
3、@FunctionalInterface注解不是必须的,只要接口只包含一个抽象方法,虚拟机会自动判断该接口为函数式接口,加上后避免添加新方法。
六、方法引用
1、方法引用是lambda表达式的一种简写;
1
2
3
4
5
6
7
|
对象::实例方法
类::静态方法
类::实例方法
类::
new
Arrays.sort(strings, String::compareToIgnoreCase);
Arrays.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));
|
来源: http://note.sdo.com/note/content/t8Lrg~mHPHlpM70gs0006W?password=2689