實例變量名 | 類名 :: 靜態方法 | 實例方法html
簡化Lambda表達式java
a -> System.out.println(a);
<=> System.out::println
或
(a, b) -> a.compareTo(b);
<=> String::compareTo;
oracle
方法引入總共有四種表現形式:code
類型 | 示例 |
---|---|
引用靜態方法 | ContainingClass::staticMethodName |
引用某個對象的實例方法 | containingObject::instanceMethodName |
引用某個類型的任意對象的實例方法 | ContainingType::methodName |
引用構造方法 | ClassName::new |
public class Emp { private int empno; private String ename; //其他方法略 }
@FunctionalInterface public interface StaticMethod { int min(int a, int b); } StaticMethod staticMethod = (a, b) -> Math.min(a,b); StaticMethod staticMethod1 = Math::min;
@FunctionalInterface public interface InstanceMethodOfParticularObject { void setEmpName(String name); } Emp emp = new Emp(1,"eName"); //普通Lambda表達式 InstanceMethodOfParticularObject instanceMethodOfParticularObject = name -> emp.setEname(name); instanceMethodOfParticularObject.setEmpName("haha"); System.out.println(emp.getEname()); //方法引入--引用某個對象的實例方法 InstanceMethodOfParticularObject instanceMethodOfParticularObject1 = emp::setEname; instanceMethodOfParticularObject1.setEmpName("xixi"); System.out.println(emp.getEname());
@FunctionalInterface public interface InstanceMethodOfArbitraryObject { boolean equale(String a,String b); } InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject = (a, b) -> a.equals(b); InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject1 = String::equals; System.out.println(instanceMethodOfArbitraryObject1.equale("a","b")); System.out.println(instanceMethodOfArbitraryObject.equale("a","a"));
@FunctionalInterface public interface ConstructorWithFullFields { Emp getNewEmp(int empno,String ename); } //無參構造 ConstructorWithNoField<Emp> constructorWithNoField = ()-> new Emp(); ConstructorWithNoField<Emp> constructorWithNoField1 = Emp::new; //全參構造 ConstructorWithFullFields constructorWithFullFields = ((empno, ename) -> new Emp(empno,ename)); ConstructorWithFullFields constructorWithFullFields1 = Emp::new;
參數類型及個數相同htm
好比第1/2/4種形式。對象
類型相同blog
所以會自動適配,不然會報錯,如:
Non-Static method cannot be referenced from a static context
get