方法引用“::”
“::”,c#里面没有这个符号,比较像事件、委托。不过比委托难理解点
方法引用分4种:
1.静态方法引用。
2.实例方法引用。
3.实例方法引用,第一个参数为实例对象,写法和静态方法引用一样。
4.构造方法的引用。
方法引用,其实就是lambda简写,lambda可以认为是匿名内部类的简写。
重点是要能根据参数推导出来。
主方法:
/* * 引用: * 所有引用都是lambda表达式的替换写法,都可以用lambda来写 * */ public class Lambda1 { public static void main(String[] args) { userEnable(s -> Integer.parseInt(s)); //应用类方法 静态方法 userEnable(Integer::parseInt); //类实例方法 Person p = new Person(); userEnable(s -> p.eat(s)); userEnable(p::eat); //类的实例方法:第一参数为类的实例 useStringEnable((s,x,y)->s.substring(x,y)); useStringEnable(String::substring); //引用构造器 userPerosnBuilder((String x,int y)->{return new Person(x,y);}); userPerosnBuilder((x,y)->new Person(x,y)); userPerosnBuilder(Person::new); } public static void userEnable(Enable e) { int num = e.eat("12"); System.out.println(num); } public static void useStringEnable(StringEnable se) { String s = se.subString("abcd", 2, 3); System.out.println(s); } public static void userPerosnBuilder(PersonBuilder pb){ Person p = pb.builder("张三",23); System.out.println(p.toString()); } }
三个接口:
public interface Enable { int eat(String s); }
public interface PersonBuilder { Person builder(String name,int age); }
public interface StringEnable { String subString(String s,int a,int b); }
一对象:
public class Person { public int eat(String s){ return Integer.parseInt(s+s); } public Person() { } public Person(String name,int age ) { this.age = age; this.name = name; } private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; } }