java8新特性

java8新特性,第1张

  default拓展方法  
java8为接口声明添加非抽象方法的实现,也成为拓展方法。

  public interface Formula {

  void doSomething();

  default void before() {

  System.out.println(“我是拓展方法”);

  }

  }

  public class FormulaService implements Formula {

  @Override

  public void doSomething() {

  before();

  System.out.println(“我是override方法”);

  }

  }

  Lambda表达式

  java8引入函数式编程,Lambda则是函数式编程的基础。

  List《String》 list = Arrays.asList(“a”, “b”, “c”);

  // java8之前

  CollecTIons.sort(list, new Comparator《String》(){

  @Override

  public int compare(String o1, String o2) {

  return o1.compareTo(o2);

  }

  });

  // lambda

  CollecTIons.sort(list, (String o1, String o2) -》 {

  return o2.compareTo(o1);

  });

  // 简洁lambda

  CollecTIons.sort(list, (String o1, String o2) -》 o2.compareTo(o1));

  // 更简洁lambda

  CollecTIons.sort(list, (o1, o2) -》 o2.compareTo(o1));

  函数式接口

  一个函数式接口有且只能有一个抽象方法申明,其中该注意的是 @FunctionalInterface 注解,此时如果在接口中定义了第二个抽象方法,编译器将会抛出异常。当然如果不加该注解也不是不行,如果接口中有多个抽象方法,而你又使用了lambda表达式,则在调用处会抛出异常。

  @FunctionalInterface

  public interface Formula《F,T》{

  T convert(F var1);

  }

  Formula《String,Integer》 function = (var1 -》 Integer.valueOf(var1));

  Integer var2 = function.convert(“1000”);

  方法和构造函数引用

  方法引用的标准语法是 类名:方法名类型示例  

java8新特性,JAVA8新特性,第2张

  引用静态方法

  Formula《String,Integer》 function = (Integer::valueOf);

  Integer var2 = function.convert(“1000”);

  引用某个类型的任意对象的实例方法

  public static void main(String[] args) {

  String[] array = {“贱明”, “学友”};

  Arrays.sort(array, String::compareTo);

  }

  引用构造方法

  // 定义工厂

  interface PersonFactory《P extends Person》{

  P create(String name);

  }

  // Person类的构造方法

  public Person(String name) {

  this.name = name;

  }

  // 创建

  PersonFactory《Person》 factory = Person::new;

  factory.create(“贱明”);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2624617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-11
下一篇 2022-08-11

发表评论

登录后才能评论

评论列表(0条)

保存