实例变量名 | 类名 :: 静态方法 | 实例方法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