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新特性的代码而不知所错!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!