从最初开始只要是进行引用基本上都是针对于引用基本上都是针对于引用类型完成的,也就是说只有数组,类,接口具备引用的操作,但是现在开始追加了方法引用的概念,实际上引用的本质就是别名,所以方法的引用就是别名的使用。而方法引用的类型可以有四种形式
引用静态方法:类名称 ::static方法名称
引用某个对象的方法:实例化对象::普通方法
引用某个特定类的方法:类名称::普通方法
引用构造方法:类名称::new
范例:引用静态方法
在String类中有一个valueof()方法,这个方法就是进行静态调用的。
1 package cn.Tony.demo; 2 @FunctionalInterface //是一个函数式编程的接口只允许有一个方法, 3 interface IUtil<P,R>{ 4 public R zhuanhuan(P p); 5 } 6 public class TestDemo { 7 public static void main(String[] args) { 8 IUtil<Integer,String> iu=String::valueOf; 9 String str=iu.zhuanhuan(1000);//用字符串来接收 10 System.out.println(str.length()); 11 } 12 }
就相当于为方法起了个别名。
范例:引用某一个对象中的方法
1 package cn.Tony.demo; 2 @FunctionalInterface //是一个函数式编程的接口只允许有一个方法, 3 interface IUtil<R>{ 4 public R zhuanhuan(); 5 } 6 public class TestDemo { 7 public static void main(String[] args) { 8 IUtil<String> iu="hello"::toUpperCase;//进行方法引用 9 System.out.println(iu.zhuanhuan()); 10 } 11 }
范例:引用类中的普通方法
String类中有一个compareTo(),进行比较大小;
1 package cn.Tony.demo; 2 @FunctionalInterface //是一个函数式编程的接口只允许有一个方法, 3 interface IUtil<R,P>{ 4 public R zhuanhuan(P p1,P p2); 5 } 6 public class TestDemo { 7 public static void main(String[] args) { 8 IUtil<Integer,String> iu=String::compareTo;//进行方法引用 9 System.out.println(iu.zhuanhuan("H","h")); 10 } 11 }
范例:引用构造方法
1 package cn.Tony.demo; 2 class Person{ 3 private String name; 4 private int age; 5 public Person(String name,int age) { 6 this.name=name; 7 this.age=age; 8 } 9 @Override 10 public String toString() { 11 return "Person [name=" + name + ", age=" + age + "]"; 12 } 13 } 14 @FunctionalInterface //是一个函数式编程的接口只允许有一个方法, 15 interface IUtil<R,FP,SP>{ 16 public R zhuanhuan(FP p1,SP p2); 17 } 18 public class TestDemo { 19 public static void main(String[] args) { 20 IUtil<Person,String,Integer> iu=Person::new;//进行方法引用 21 System.out.println(iu.zhuanhuan("H",20)); 22 } 23 }