美文网首页JavaEE 学习专题技术干货基础原理
3.Java8新特性 - 方法引用与构造器

3.Java8新特性 - 方法引用与构造器

作者: Mr_欢先生 | 来源:发表于2018-10-24 22:17 被阅读87次

    一.方法的引用

    • 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。
    • 注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"::"

    二.四种方法引用类型

    方法引用的标准形式是:类名::方法名。(方法名不含括号)

    类型 示例
    引用静态方法 ContainingClass::staticMethodName
    引用某个对象的实例方法 containingObject::instanceMethodName
    引用某个类型的任意对象的实例方法 ContainingType::methodName
    引用构造方法 ClassName::new
    import java.util.Date;
    
    public class User {
        private Date createDate;
    
        public Date getCreateDate() {
            return createDate;
        }
    
        public void setCreateDate(Date createDate) {
            this.createDate = createDate;
        }
    
        public static int compareByAge(User a, User b){
            return a.createDate.compareTo(b.createDate);
        }
    
    }
    
    
    • 静态方法引用
    public void test() {
            User[] users = new User[5];
    
            //使用lambda表达式
            Arrays.sort(users, (o1, o2) -> o1.getCreateDate().compareTo(o2.getCreateDate()));
            //等价于
            Arrays.sort(users, (o1, o2) -> User.compareByAge(o1, o2));
            //方法引用
            Arrays.sort(users, User::compareByAge);
        }
    
    
    • 引用对象的实例方法
    public void test() {
            User [] users = new User[5];
            class ComparisonProvider{
                public int compareByAge(User a,User b){
                    return a.getCreateDate().compareTo(b.getCreateDate());
                }
            }
            ComparisonProvider provider = new ComparisonProvider();
    
            //lambda表达式
            Arrays.sort(users,(a,b)->provider.compareByAge(a,b));
    
            //使用方法引用
            Arrays.sort(users, provider::compareByAge);
        }
    
    • 引用类型对象的实例方法
    public void test() {
            String[] array = {"Hello","lamdba"};
    
            //lambda表达式
            Arrays.sort(array,(s1,s2)->s1.compareToIgnoreCase(s2));
    
            //使用方法引用
            Arrays.sort(array, String::compareToIgnoreCase);
        }
    
    • 引用构造方法
    @FunctionalInterface
    interface MyFuntion {
    
        User function(Date n);
    }
    
    public class Main {
        public void test() {
    
            //lambda表达式
            MyFuntion myFuntion = (data)-> new User(data);
    
            //使用方法引用
            MyFuntion myFuntion = User::new;
        }
    }
    
    

    相关文章

      网友评论

      本文标题:3.Java8新特性 - 方法引用与构造器

      本文链接:https://www.haomeiwen.com/subject/zrkxtqtx.html