Java核心技术----接口、lambda表达式

1、接口
定义:
public interface Comparable{
     int compareTo(Object other);
}
若要使用Arrays类中的sort方法,对象所属的类必须实现Comparable接口。
实现:
class Employee implements Comparable{
     public int compareTo(Object otherObject){
          Employee other=(Employee) otherObject;
          return Double.compare(salary,other.salary);
     }
}
特性:
a.接口不能使用new实例化
b.不能构造接口的对象,却能声明接口的变量 Comparable x;
c.接口变量必须引用实现了接口的类对象 x=new Employee(...);
d.instanceof可以检查一个对象是否实现了某个特定的接口
e.接口可以继承,不能包含成员变量,可以包含常量,接口中的方法
都自动的设置为public,域自动设置为public static final
f.可以实现多个接口,但不能继承多个类

Java SE8中接口新增特性:静态方法和默认方法
静态方法:可以定义一个或者更多个静态方法。类似于类中的静态方法,接口定义的静态方法
可以独立于任何对象调用。所以,在调用静态方法时,不需要实现接口,也不需
要接口的实例,也就是说和调用类的静态方法的方式类似。语法如:接口名字.静态方法名
注:实现接口的类或者子接口不会继承接口中的静态方法。static不能和default同时使用。
默认方法:可以为接口方法提供一个默认实现。
public interface Comparable<T>{
    default int compareTo(T other){return 0;}
}
默认方法主要优势是提供了一种扩展接口的方法,而不破坏现有代码。
默认方法另一个优势是该方法是可选的,子类可以根据不同的需求而且经override或者采用默认实现。
解决默认方法冲突:超类优先;覆盖默认方法

2、lambda表达式
lambda是一个匿名函数,可以把lambda表达式理解为是一段可以传递的代码.
语法:(parameters) -> expression或(parameters) ->{ statements; }

特性:不需要声明参数类型,编译器可以统一识别参数值,
一个参数无需定义圆括号,但多个参数需要定义圆括号,
主体包含一个语句,就不需要使用大括号,
如果主体只有一个表达式返回值则编译器会自动返回值。

lambda表达式的目标类型是函数式接口,可以用lambda表达式为函数式接口赋值:
Runnable r1=()->System.out.println("Hello!");
然后再赋值给一个Object: Object obj=r1;

用处:lambda表达式主要用于替换以前广泛使用的内部匿名类,各种回调,比如事件响应器、传入Thread类的Runnable,与集合类的批处理操作等

Thread t=new Thread( ()->System.out.println("hello!"));

list.forEach(o -> {System.out.println(o);}); //forEach函数实现内部迭代,循环打印list中的元素

方法引用:

  Comparator<Integer> c21= (x, y) -> Integer.compare(x, y);等价于 Comparator<Integer> c1 = Integer::compare; (静态方法引用)

  persons.forEach(e -> System.out.println(e));等价于 persons.forEach(System.out::println); (实例方法引用)

  strList.stream().map(s -> new Integer(s));等价于 strList.stream().map(Integer::new); (构造器引用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值