Java 8新特性方法引用详细介绍
Java8新特性方法引用
对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容!
Java8的方法引用定义了四种格式:
- 引用静态方法 ClassName::staticMethodName
- 引用对象方法: Object::methodName
- 引用特定类型方法:ClassName::methodName
- 引用构造方法:ClassName ::new
静态方法引用示例
/**
*静态方法引用
*@param<P>引用方法的参数类型
*@param<R>引用方法的返回类型
*/
@FunctionalInterface
interfaceFunStaticRef<P,R>{
publicRtranTest(Pp);
}
publicstaticvoidmain(String[]args){
/*
*静态方法引用:publicstaticStringvalueOf
*即将String的valueOf()方法引用为FunStaticRef#tranTest方法
*/
FunStaticRef<Integer,String>funStaticRef=String::valueOf;
Stringstr=funStaticRef.tranTest(10000);
System.out.println(str.replaceAll("0","9"));
}
对象方法引用示例
/**
*普通方法引用
*@param<R>引用方法返回类型
*/
@FunctionalInterface
interfaceInstanRef<R>{
publicRupperCase();
}
publicstaticvoidmain(String[]args){
/*
*普通方法的引用:publicStringtoUpperCase()
*
*/
Stringstr2="iseeyou";
InstanRef<String>instanRef=str2::toUpperCase;
System.out.println(instanRef.upperCase());
}
特定类型方法引用示例
特定方法的引用较为难理解,本身其引用的是普通方法,但是引用的方式却为:ClassName::methodName
/**
*特定方法的引用
*@param<P>
*/
@FunctionalInterface
interfaceSpecificMethodRef<P>{
publicintcompare(Pp1,Pp2);
}
publicstaticvoidmain(String[]args){
/*
*特定方法的引用publicintcompareTo(StringanotherString)
*与之前相比,方法引用前不再需要定义对象,而是可以理解为将对象定义在了参数上!
*/
SpecificMethodRef<String>specificMethodRef=String::compareTo;
System.out.println(specificMethodRef.compare("A","B"));
ConstructorRef<Book>constructorRef=Book::new;
Bookbook=constructorRef.createObject("Java",100.25);
System.out.println(book);
}
构造方法引用示例
classBook{
privateStringtitle;
privatedoubleprice;
publicBook(){
}
publicBook(Stringtitle,doubleprice){
this.price=price;
this.title=title;
}
@Override
publicStringtoString(){
return"Book{"+"title='"+title+'\''+",price="+price+'}';
}
}
publicstaticvoidmain(String[]args){
/*
*构造方法引用
*/
ConstructorRef<Book>constructorRef=Book::new;
Bookbook=constructorRef.createObject("Java",100.25);
System.out.println(book);
}
总的来说Java8一些新的特性在目前做的项目中还未大量使用,但是学习一下,到时也不至于看到这种Java8新特性的代码而不知所错!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!