引用数据类型
引用数据类型最大的特点是可以进行内存的指向处理,但是在传统的开发之中一直所使用的只是对象引用此操作,而从JDK1.8之后也提供有方法的引用,即:不同的名称可以描述同一个方法。如果要进行方法的引用在Java里面提供有如下的四种形式:
‒ 引用静态方法:类名称::static方法名称
‒ 引用某个实例对象的方法:实例化对象::普通方法
‒ 引用特定类型的方法:特定类::普通方法
‒ 引用构造方法:类名称::new
引用静态方法
@FunctionalInterface
// P描述的是参数,R描述的是返回值
interface IFunction<P, R> {
public R change(P p);
}
public class JavaDemo {
public static void main(String args[]) {
IFunction<Integer, String> fun = String::valueOf;
String str = fun.change(100);
System.out.println(str.length());
}
}
//利用方法引用这一概念可以为一个方法定义多个名字,但是要求必须是函数式接口。
引用实例化对象中的方法
‒ 在String类里有一个转大写的方法:public String toUpperCase()
‒ 这个方法是必须在有实例化对现象提供的情况下才可以调用
@FunctionalInterface
// P描述的是参数,R描述的是返回值
interface IFunction<R> {
public R upper();
}
public class JavaDemo {
public static void main(String args[]) {
IFunction<String> fun = "www.mldn.cn"::toUpperCase;
System.out.println(fun.upper());
}
}
引用指定类中的方法
@FunctionalInterface
// P描述的是参数,R描述的是返回值
interface IFunction<P> {
public int compare(P p1,P p2);
}
public class JavaDemo {
public static void main(String args[]) {
IFunction<String> fun = String::compareTo;
System.out.println(fun.compare("A","a"));
}
}
引用构造方法
class Person{
private String name ;
private int age;
public Person(Stirng name,int age){
this.name = name;
this.age = age ;
}
public String toString(){
return "姓名" + this.name + "\t年龄" + this.age ;
}
}
@FunctionalInterface
interface IFunction<R> {
public R create(String s,int a);
}
public class JavaDemo {
public static void main(String args[]) {
IFunction<Person> fun = Person::new;
System.out.println(fun.create("张三",20));
}
}