Supplier<X>和Supplier<?>有什么不同?扩展X
Supplier<X>和Supplier<?>都是Java中的泛型接口,用于表示一个生产型函数,即可以用来生成某个类型的对象。
Supplier<X>是一个特定类型的生产者,表示可以生成X类型的对象。X可以是任何合法的Java类型,包括基本类型和自定义类型。使用Supplier<X>可以方便地在需要生成X类型对象的地方提供生成器。
示例代码:
Supplier<String> stringSupplier = () -> "Hello";
String result = stringSupplier.get(); // "Hello"
Supplier<Integer> integerSupplier = () -> 42;
int result = integerSupplier.get(); // 42
Supplier<?>是一个通用类型的生产者,表示可以生成任何类型的对象。使用Supplier<?>可以方便地在需要生成对象的地方提供生成器,但由于无法确定具体生成的对象类型,因此在使用时需要进行类型转换。
示例代码:
Supplier<?> supplier = () -> "Hello";
Object result = supplier.get();
String str = (String) result; // 需要进行类型转换
Supplier<?> supplier = () -> 42;
Object result = supplier.get();
int num = (int) result; // 需要进行类型转换
扩展X表示可以对Supplier的类型进行扩展,即可以传入更具体的类型作为泛型参数。这样可以在使用Supplier时更精确地指定生成的对象类型,避免类型转换的麻烦。
示例代码:
// 定义一个Supplier,可以生成List<String>类型的对象
Supplier<List<String>> listSupplier = () -> new ArrayList<>();
List<String> list = listSupplier.get();
// 定义一个Supplier,可以生成Map<Integer, String>类型的对象
Supplier<Map<Integer, String>> mapSupplier = () -> new HashMap<>();
Map<Integer, String> map = mapSupplier.get();
总结:
领取专属 10元无门槛券
手把手带您无忧上云