zoukankan      html  css  js  c++  java
  • java8 新特性

    看了下java8的新特性,记下笔记,

    1.添加了Optional,

    这个是guava里面出现的,现在java8里面也支持了,Optional是用来处理null值的。

    用法基本和guava里面的一致,

    public static void main(String[] args) {
            Optional<String> str = Optional.of("abc");
            System.out.println(str.isPresent());
            System.out.println(str.get());
            
            str = Optional.empty();
            System.out.println(str.isPresent());
            System.out.println(str.orElse("abcd"));
        }

    输出的值为:

    true
    abc
    false
    abcd

    当里面有值的时候,使用orElse是会得到原来的值的,如当

    Optional<String> str = Optional.of("abc");
           
            System.out.println(str.orElse("123"));

    这时输出的是abc

    2.接口中能添加默认方法了,示例如下

    public interface Formula {
        double calculate(int a);
    
        /**
         * java8 新特性 接口中能添加默认方法,又叫做扩展方法,实现这个接口,不需要重写默认方法,可以直接用
         * @param a
         * @return
         */
        default double sqrt(int a) {
            return Math.sqrt(a);
        }
    }

    默认方法可以实现,需要用default关键字

    实现这个接口的类不需要重写默认方法

    3.@FunctionalInterface 注解,

    用这个注解标记的接口会被认为是函数接口,即只有一个抽象方法(默认方法不是抽象方法),当有多个抽象方法的时候会出现编译错误提示

    4.lambda表达式,这个是很多人都知道的变化

    当实现函数式接口的时候可以使用lambda表达式

    Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String a, String b) {
                    return b.compareTo(a);
                }
            });
    
    Collections.sort(list, (String a, String b) -> b.compareTo(a));
    
     Collections.sort(list, (String a, String b) -> {
               return b.compareTo(a);
            });
    
    Collections.sort(list,(a,b) -> b.compareTo(a));

    这上面四种写法是等效的

    lambda表示式的基本形式为 () -> {}

    当整个实现写在一行时,可以去掉小括号和return关键字,()里面的是参数,可以省略参数类型

    5.方法和构造器的引用

    示例:

    public class Person {
        private String firstName;
    
        private String lastName;
    
        Person(){}
    
        Person(String firstName, String listName) {
            this.firstName = firstName;
            this.lastName = listName;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public static void main(String[] args) {
            PersonFactory<Person> factory = Person::new;
            Person person = factory.createPerson("luo","lei");
            System.out.println(person.getFirstName()+" "+person.getLastName());
        }
    }
    public interface PersonFactory<T extends Person> {
        T createPerson(String firstName, String lastName);
    }

    使用::关键字,可以引用方法或构造器,这个接口只能是函数式接口

    当然java8 还添加了一些接口,和其他的特性,我没看完

    java8 的新特性就记录到这里 

  • 相关阅读:
    Kubernetes之(四)kubeadm部署集群
    Kubernetes之(三)核心组件ETCD介绍
    Kubernetes之(二)核⼼技术概念和API对象
    Kubetnetes之(一)基础介绍
    docker入门基础(六)
    docker入门基础(八)
    docker入门基础(七)
    docker入门基础(五)
    docker入门基础(四)
    docker入门基础(三)
  • 原文地址:https://www.cnblogs.com/luolei/p/4738167.html
Copyright © 2011-2022 走看看