Java 方法引用_特性

2020-11-12 11:23:57 浏览数 (1)

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

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

引用静态方法:

代码语言:javascript复制
  类名称 ::  static 方法名称

引用某个对象的方法:

代码语言:javascript复制
  实例化对象 :: 普通方法

引用特定类型的方法:

代码语言:javascript复制
  特定类 :: 普通方法

引用构造方法:

代码语言:javascript复制
  类名称 :: new

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

代码语言:javascript复制
/**
 * 实现方法的引用接口
 * @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"));
    }
}

普通方法引用:

代码语言:javascript复制
/**
 * 实现方法的引用接口
 * @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

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

…………………………

引用构造方法:

代码语言:javascript复制
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   't'   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

0 人点赞