方法引用

对于方法引用我一直没有弄懂,今天仔细的研究一下方法引用。
首先我们在最初学习java的时候在数组的时候我们有一个引用传递,那个传递是我们在定义函数的时候将数组作为参数进行传递这个时候传入的是它的地址。所以从最开始,我们的方法引用一直都是只对于引用数据类型(数组、类、接口)才有的。但是在JDK1.8开始追加了方法引用的概念,方法引用的本质就是别名的使用,将原来需要调用方法的名称改为另外的方法去引用方法。对于方法引用我们一共有四种形式:
(1)引用静态方法:类名称::static 方法名称
(2)引用某个对象的方法:实例化对象::普通方法
(3)引用某个特定类的方法:类名称::普通方法
(4)引用构造方法:类名称::new
1.引用静态方法
String类的valueOf方法

package www.bit.java.testdemo; 
@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法 
interface IUtil<P,R> {    public R switchPara(P p) ; }
 
public class TestDemo {    
public static void main(String[] args) {        IUtil<Integer,String> iu = String :: valueOf ; //进行方法引用        
String str = iu.switchPara(1000) ; // 相当于调用了String.valueOf(1000) ,这个iu就相当于是别名        System.out.println(str.length()); 
}
}

2.引用对象方法
String中的toUpperCase()方法为对象方法

package www.bit.java.testdemo; 
@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法 
interface IUtil<R> {    
public R switchPara() ; }
public class TestDemo {    
public static void main(String[] args) {        
IUtil<String> iu = "hello" :: toUpperCase ; // 进行方法引用        System.out.println(iu.switchPara()); // 转换的就是这个"hello" 
}
}

3.引用类中普通方法
String有一个compareTo方法,此方法为普通方法

package www.bit.java.testdemo; 
@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法 
interface IUtil<R,P> {    
public R compare(P p1,P p2) ;   
} 
public class TestDemo {    
public static void main(String[] args) {        
IUtil<Integer,String> iu = String :: compareTo ;         System.out.println(iu.compare("刘", "霍"));
}
}

4.引用构造方法

package www.bit.java.testdemo;
 
class Person {    
private String name ;     
private int age ;    
public Person(String name, int age) {        
super();        
this.name = name;        
this.age = age;   
 }    
@Override    public String toString() {        
return "Person [name=" + name + ", age=" + age + "]"; 
}
}
@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法 
interface IUtil<R,PN,PA> {    
public R createPerson(PN p1,PA p2) ;   
} 
public class TestDemo {    
public static void main(String[] args) {        IUtil<Person,String,Integer> iu = Person :: new;         System.out.println(iu.createPerson("yuisama", 25)); // 相当于调用Person类的构造方法    
} 
}

对于方法引用主要是在函数接口的时候用,因为函数接口只有一个方法,所以可以将它需要的方法通过方法引用重新起一个名字。

上一篇:git代码合并:Merge、Rebase的选择


下一篇:[Android Studio] Android Studio底边栏选项不见了,如何调出来