方法和构造函数的便捷应用
2023-04-15 11:13
3233
0
在上面我们先加了印象片段 XX::xx,它也是Java8的新特性便捷式引用,这四个点可能你在其他语言里也见过。
IConverter<Integer, String> converter04 = String::valueOf; String converted04 = converter04.convert(11); System.out.println(converted04);
@小傅哥: 代码已经复制到剪贴板
这四个点::的关键字,不只是可以引用方法和构造函数,还可以引用普通方法。
public class Something{ public String startsWith(String s) { return String.valueOf(s.charAt(0)); } }
@小傅哥: 代码已经复制到剪贴板
IConverter<String, String> converter01 = s -> String.valueOf(s.charAt(0)); //[参照物]直接把逻辑放到这调用
IConverter<String, String> converter02 = something::startsWith; //引用的方法体里面逻辑可以更多,否则只是一句代码并不能适合所有的情况
System.out.println(converter01.convert("Java"));
System.out.println(converter02.convert("Java"));
@小傅哥: 代码已经复制到剪贴板
接下来我们在使用这四个点,来看下如何引用类的构造器。首先我们创建一个这样的类;
public class Person { String firstName; String lastName;
Person() {} Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; }
}
@小傅哥: 代码已经复制到剪贴板
然后我还需要顶一个工厂类,用于生成Person对象;
@FunctionalInterface public interface IPersonFactory<P extends Person> {
P create(String firstName, String lastName);
}
@小傅哥: 代码已经复制到剪贴板
现在就到了用四饼::的时候了;
IPersonFactory<Person> personFactory = Person::new; //[参照物]:(firstName, lastName) -> new Person(firstName, lastName); Person person = personFactory.create("Peter", "Parker");
@小傅哥: 代码已经复制到剪贴板
提醒;工厂函数中依然只能有一个函数,否则会报错
四饼::,可以让我们直接引用到Person类的构造函数,然后 Java 编译器能够根据类的签名选中正确的构造器去实现 PersonFactory.create 方法。
全部评论