Java8中新增的函数式编程
使用 '::' 引用代表的都是一个执行过程,即一个方法,而非方法执行后获得的实例
1. 可通过两个冒号来实现对某个类的方法类型进行引用(引用的是类型,并非方法的执行结果)
a. 若引用当前类中的方法的类型,可直接使用'::XXX'格式进行引用(注意,方法名后没有括号)
b. 或使用某对象加'::'来引用某实例对象的方法(形如a::bb)
注意:XXX() 和 ::XXX 的执行效果完全不同,XXX()为调用了一个函数,会真正执行,而::XXX仅声明了一种类型,由于未给任何变量赋值,即无法使用,编译时应该会被去掉吧?
故:此种引用方式似乎除了高阶函数中使用没有别的用了?
2. 可以通过这种语法来定义一个类的构造方法引用变量
例:class Book(name:String){}
val getBool=::Book(此处引用的是Book的构造方法的类型,getBook的类型为(name:String)->Book)
使用:getBook("name of Book").name 此时得到的是一个Book对象的name字段对应的字符,即 ‘name of book’。
其他示例:
定义Book类 各种使用方式(正确及不正确的) 类变量加‘::’的使用此处Book::name 是一个(Book)->String 类型的函数,即map()此处应该是个高阶函数
使用:‘::’只表示引用其类型,与函数相关,只用于声明类型,不能企图获取其执行后的结果,若要获取执行结果,需要再通过调用声明的变量实现。与变量相关,获取到的为一个函数类型定义,非具体值,无法获取变量内容,需要使用'.'连接符,可以通过调用构造过程后通过‘.'连接符获取类变量值
网友评论