标签:函数 integer length string message cti hal 接口 inter
什么是方法引入:
方法引入:需要结合lambda表达式能够让代码变得更加精简。
1.匿名内部类使用。
2.Lambda调用匿名内部类。
3.方法引入。
方法引入的几种:
1.静态方法引入: 类名::(静态)方法名称
2.对象方法引入: 类名:: 实例方法名称
3.实例方法引入: new 对象 对象实例:: 方法引入
4.构造函数引入: 类名::new
一、静态方法引入:
package com.mayikt.test;
import com.mayikt.service.MessageInterface;
/**
* 静态方法引入
*/
public class Test006 {
public static void main(String[] args) {
MessageInterface messageInterface = (a) -> System.out.println(a);
messageInterface.get(123);
/**
* 在lambda表达式中方法体直接引入方法
*/
MessageInterface messageInterface2 = (a) -> Test006.staticGet(a);
messageInterface.get(12);
/**
* 方法引入实际上就是,lambda表达式中方法体直接引入方法
*/
MessageInterface messageInterface3 = Test006::staticGet;
messageInterface3.get(3);
/**
* Test006::staticGet 为何能够等于 (a) -> Test006.staticGet(a);
*
* 1.staticGet的参数列表和返回值与MessageInterface都是一样的。
*/
}
public static void staticGet(Integer a){
System.out.println("staticGet a :" + a);
}
}
package com.mayikt.service;
@FunctionalInterface
public interface MessageInterface {
void get(Integer a);
}
方法引入规则:
方法引入实际上就是lambda表达式中直接引入的方法。
必须遵循规范:引入的方法参数列表和返回类型,必须要和函数接口参数列表、返回类型保持一致。
二、实例方法引入:
package com.mayikt.test;
import com.mayikt.service.MessageInterface2;
public class Test007 {
public static void main(String[] args) {
MessageInterface2 messageInterface2 = () -> "阿收到货后";
System.out.println(messageInterface2.getMessage());
Test007 test007 = new Test007();
MessageInterface2 messageInterface3 = () -> test007.objGet();
System.out.println(messageInterface3.getMessage());
/**
* 实例方法引入的规则和静态方法引入规则一样
*/
MessageInterface2 messageInterface4 = test007::objGet;
System.out.println(messageInterface4.getMessage());
}
public String objGet(){
return "阿收到货后";
}
}
@FunctionalInterface
public interface MessageInterface2 {
String getMessage();
}
三、构造函数引入
public class Test008 {
public static void main(String[] args) {
MessageInterface3 messageInterface3 = () -> new MessageEntity();
/**
* 构造函数引入,遵循规范:函数接口返回类型::new
*/
MessageInterface3 messageInterface4 = MessageEntity::new;
}
}
@FunctionalInterface
public interface MessageInterface3 {
MessageEntity getMessageEntity();
}
public class MessageEntity {
private String messageId;
private String messageName;
public MessageEntity(){
}
@Override
public String toString() {
return "MessageEntity{" +
"messageId=‘" + messageId + ‘\‘‘ +
", messageName=‘" + messageName + ‘\‘‘ +
‘}‘;
}
}
四、对象方法引入
public class Test009 {
public static void main(String[] args) {
Function<String, Integer> function = (str) -> str.length();
System.out.println(function.apply("aksdhalsdh"));
Function<String, Integer> function2 = String::length;
System.out.println(function2.apply("aksdhalsdh"));
}
}
标签:函数 integer length string message cti hal 接口 inter
原文地址:https://www.cnblogs.com/tenWood/p/14388133.html