Board logo

标题: jdk5-8的区别(3) [打印本页]

作者: look_w    时间: 2018-12-14 16:25     标题: jdk5-8的区别(3)

Java8允许使用::关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:
public class Person {
    String firstName;
    String lastName;
    Person() {
    }
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
    }
}
指定一个用来创建Person对象的对象工厂接口:
public interface PersonFactory<P extends Person> {
P create(String fisrtName, String lastName);
}
创建Person对象
PersonFactory<Person> personFactory = Person::new;
Person person = personFactory.create("Peter","Parker”);
我们只需要使用Person::new 来获取Person类构造函数的引用,Java编译器就会自动根据PersonFactory.create方法的签名来选择合适的构造函数。
5、Lambda作用域
在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
6、访问局部变量
我们可以直接在lambda表达式中访问外层的局部变量
final int num = 1;
Converter<Integer, String> stringConverter = (from) -> String.valueOf(from + num);
stringConverter.convert(2);
但是和匿名对象不同的是,这里的变量num可以不用声明为final,该代码同样正确。
7、访问对象字段与静态变量
和本地不良不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:
static int outerStaticNum;
int outerNum;
public void testScopes() {
    Converter stringConverter1 = (from) -> {
        outerNum = 23;
        return String.valueOf(from);
    };
    Converter stringConverter2 = (from) -> {
        outerStaticNum = 72;
        return String.valueOf(from);
    };
}
8、访问接口的默认方法
9、Date API
10、Annotation注解




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0