zoukankan      html  css  js  c++  java
  • Java 方法引用_特性

    JAVA8 方法引用:(四种方法引用的使用)

      对象引用的特点:不同的对象可以操作同一块的内容;而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字。

    引用静态方法:

      类名称 ::  static 方法名称

    引用某个对象的方法:

      实例化对象 :: 普通方法

    引用特定类型的方法:

      特定类 :: 普通方法

    引用构造方法:

      类名称 :: new

    引用静态方法:【在String类中有一个valueOf()方法;】?

    /**
     * 实现方法的引用接口
     * @param<P> 引用方法参数的类型
     * @param<R> 引用方法返回的类型
     */
    interface IMessage<P,R> {
        public R zhuanhuan(P p) ;
    }
    
    public class TestDemo {
        public static void main(String [] args) {
            //即:将String(类).valueOf()方法变为了IMessage接口里的zhuanhuan()方法
             IMessage<Integer,String> msg = String :: valueOf;
             String str = msg.zhuanhuan(1000) ;
             System.out.println(str.replaceAll("0","9"));
        }
    }

    普通方法引用:

    /**
     * 实现方法的引用接口
     * @param<R> 引用方法返回的类型
     */
    interface IMessage<R> {
        public R upper() ;
    }
    
    public class TestDemo {
        public static void main(String [] args) {
            // String类的toUpperCase()方法的目的是将实例化对象调用该方法
            // 本代码中,将toUpperCase()函数的应用交给了IMessage接口的upper方法
             IMessage<String> msg = "Hello" :: toUpperCase;
             String str = msg.upper() ; // 相当于调用 "Hello".toUpperCase()
             System.out.println(str);
        }
    }

      【如果要实现函数的引用,那么必须要有接口,并且接口中有且只有一个抽象方法】

     >>> 如果函数引用的接口有多个抽象方法则为不合规则,这时需要引用一个注解,说明该接口为函数式接口(函数引用): @FunctionalInterface

      

      在进行方法引用的时候,还有另外的一种形式的引用:(需要特定类的对象支持)

    …………………………

    引用构造方法:

    interface IMessage<C> {
        public C create(String t , double p) ;
    }
    
    class Book {
        private String title ;
        private double price ;
        public Book(String title , double price) {
            this.title = title ;
            this.price = price ;
        }
        @Override
        public String toString() {
            return this.title + '	' + this.price ;
        }
    }
    
    public class TestDemo {
        public static void main(String [] args) {
            IMessage<Book> msg = Book :: new ;   //引用Book类中的构造方法
            // 调用的create实际上是调用的Book.Book()构造方法
             Book book = msg.create("Java Fail",12.2) ;
             System.out.println(book); 
        }
    }

      对象的引用是使用不同的名字,而方法引用是需要有一个函数式的接口并且设置号参数。


    推荐学习:https://www.cnblogs.com/xiaoxi/p/7099667.html

  • 相关阅读:
    javascript对象继承的实现
    浏览器兼容问题汇总<转>
    DOM笔记
    Ajax日记
    学习态度
    项目1
    导航项目-整体布局
    有关布局
    导航项目开始
    windows 服务 定时程序 跑不出数据
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10934474.html
Copyright © 2011-2022 走看看