这里使用Supplier接口举例,先解释一下Supplier接口的作用:接口仅包含一个无参的方法:get()。用来获取一个泛型参数指定类型的对象数据。由于这是一个函数式接口,这也就意味看对应的 Lambda表达式需要“对外提供”个符合泛型类型的对象数据。
简单来说就是返回一个指定类型的数据对象的。
举个简单的例子,直接看代码吧
public class Test {
public static void main(String[] args) {
//使用匿名内部类实现
String s1 = new Supplier<String>() {;
@Override
public String get() {
System.out.println("你好");
return "返回你好";
}
}.get();
System.out.println(s1);
//执行语句的输出结果
//你好
//返回你好
System.out.println("=======================");
//使用lambda表达式实现
Supplier<String> supplier = ()->{
System.out.println("hello world");
return "你好 世界";
};
String s2 = supplier.get();
System.out.println(s2);
//执行语句输出结果
//hello world
//你好 世界
}
}
注意:
Supplier<String> supplier
这里加String是因为Supplier接口使用了泛型,实现时要传递一个数据类型进去,也即返回的数据类型,不过注意不能是基本数据类型,得是包装类。
如源码所示
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
当然也可以不加<String>
,不过这样返回的return "你好 世界";
就是一个Object类型,与所需类型不匹配,需要进行强制转换。String s2 = (String)supplier.get();