public class Types extends Object
| 构造器和说明 |
|---|
Types() |
| 限定符和类型 | 方法和说明 |
|---|---|
static <T> T |
cast(Object o)
更加优雅得进行类型转换。
|
static <T> Class<T> |
getClass(T t)
获取
t对应的class,在使用泛型的场景中,能够更加精确的获取对应的类型,而不需要手动进行一次转换
String s = ...;
// 之前的写法
Class<String> clazz = (Class<String>) s.getClass();
// 现在的写法
Class<String> clazz = Types.getClass(s);
|
static <T> Class<T> |
getGeneric(Object object,
Class<?> clazz)
获取
object对应clazz的泛型,暂时支持只有一个泛型的类。 |
public static <T> T cast(Object o)
一些泛型类,如果需要进行转换,
使用 Class.cast(Object) 将无能为力,
使用 Types#cast(Object) 可以很方便地支持泛型类的转换。
如 Optional<String> 的转换,
通过 Optional.class#cast(Object) 可以转换成Optional,但是泛型的String无法体现;
通过 Types.<Optional<String>>cast(Object) 可以很方便地支持 Optional<String> 的转换。
Note: 在赋值给变量的时候,由于有上下文的类型推导,可以很方便的写成如下:
Object o = ...;
// 之前的写法
Optional<String> opt = (Optional<String>) o;
// 现在的写法
Optional<String> opt = Types.cast(o);
可以看到,新的写法规避了 Optional<String> 的2次出现,其可以通过需要赋值的类型进行类型推导public static <T> Class<T> getClass(T t)
t对应的class,在使用泛型的场景中,能够更加精确的获取对应的类型,而不需要手动进行一次转换
String s = ...;
// 之前的写法
Class<String> clazz = (Class<String>) s.getClass();
// 现在的写法
Class<String> clazz = Types.getClass(s);
public static <T> Class<T> getGeneric(Object object, Class<?> clazz)
object对应clazz的泛型,暂时支持只有一个泛型的类。
T - 泛型的类型object - 对应对象,支持匿名类、lambda表达式,如果要使用lambda对象的传入,则 clazz 必须实现 Serializableclazz - 需要获取泛型对应的类Copyright © 2021. All rights reserved.