JAVA 方法引用

一直以来我们都只是在对象上看见引用的身影,而对象引用的特点,就是不同的对象能够操作同一块内容,方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字

方法引用在JAVA8之中一共定义了四种形式:

1、引用静态方法:类名称 :: static方法名称 ;

2、引用某个对象的方法: 实例化对象 :: 普通方法 ;

3、引用特定类型的方法 : 特定类 :: 普通方法 ;

4、引用构造方法: 类名称 :: new 。


注意:要实现方法引用的接口只能定义一个方法,所以我们可以在接口前面使用 @FunctionalInterface(函数式接口声明) ,表示此接口只能定义一个方法,如果超过一个,将会报错



1、引用静态方法:

/** 
    实现方法的引用接口 
    P表示方法的参数类型 
    R表示方法的返回值类型 
*/  
@FunctionalInterface   
interface IMessage<P,R>{//定义接口  
    public R conversion(P p) ;  
}  
  
public class Demo{  
    public static void main (String [] args){  
        //将String类的valueOf()方法变为IMessage接口里的conversion()方法  
        //valueOf()方法可以接受int型数据,返回String型数据  
        IMessage<Integer,String> msg = String :: valueOf ;  
        String str = msg.conversion(1000);//调用引用方法进行操作  
        //将接受到的int型整数中所有的0换为9输出  
        System.out.println(str.replaceAll("0","9")) ;  
    }  
}  
//程序执行结果:1999


2、引用某个对象的方法:

注意:引用没有参数的普通方法必须是要在有实例化对象的情况下才可以调用

@FunctionalInterface 
interface IMessage<P>{
	public P conversion() ;
}

public class Demo{
	public static void main (String [] args){
		//将String的toUpperCase()方法变为IMessage接口的conversion()方法
		//此方法没有参数,但是有返回值,并且这个方法一定要在有实例化对象的情况下才可以调用
		IMessage<String>msg = "hello" :: toUpperCase ;
		//相当于使用了String.toUpperCase()方法。
		String str = msg.conversion() ;//调用方法操作数据
		System.out.println(str) ;
	}
}
//运行结果:HELLO
3、引用特定类型的方法:
@FunctionalInterface 
interface IMessage<P>{
	public int conversion(P p1 , P p2) ;
}

public class Demo{
	public static void main (String [] args){
		//将String的compaerTo()方法变为IMessage接口的conversion()方法
		IMessage<String>msg = String :: compareTo ;
		System.out.println(msg.conversion("A","B")) ;
	}
}
//运行结果:-1

4、引用构造方法:

@FunctionalInterface 
interface IMessage<P>{
	//引用构造方法
	public P conversion(String title , double price ) ;
}
class Book{
	private String title ;
	private double price ;

	public Book(String title , double price ){//有两个参数的构造方法
		this.title = title ;
		this.price = price ;
	}

	@Override
	public String toString(){//重写toString()方法
		return "书名:" + this.title + ",价格:" + this.price ;
	}
}

public class Demo{
	public static void main (String [] args){
		IMessage<Book> msg = Book :: new ; //引用构造方法
		//虽然调用的是conversion()方法,但是这个方法引用的是Book类的构造方法!
		Book book = msg.conversion("JAVA开发",89.9) ;
		System.out.println(book) ;
	}
}
//运行结果:书名:JAVA开发,价格:89.9



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值