什麼是方法引入:
方法引入:需要結合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")); } }