我不确定这个问题是否属于这里。我编写了以下方法将对象转换为特定类型。
private static <T> T cast(Object obj) {
return (T) (obj);
}
我想知道为什么我在 Guava 或 Apache Commons 中找不到这种方法?我错过了什么吗?
谢谢,
文克
我不确定这个问题是否属于这里。我编写了以下方法将对象转换为特定类型。
private static <T> T cast(Object obj) {
return (T) (obj);
}
我想知道为什么我在 Guava 或 Apache Commons 中找不到这种方法?我错过了什么吗?
谢谢,
文克
您可以使用带有方法的标准转换方法
SomeClass o = SomeClass.class.cast(obj);
没有理由使用你的方法
SomeClass o = Utils.<SomeClass>cast(obj);
因为它不是类型保存的。特别是 Guava 旨在最大限度地利用 java 的静态类型。使用您的方法,可以将任何类的对象转换为任何其他类的对象。这是不应该做的。
如果你想尝试以下
Integer a = (Integer) "1";
编译器会理所当然地抱怨。如果您使用您的 cast 方法,您将摆脱编译错误并将错误推迟到运行时。这绝不是一个好主意。此外,编译器会警告您未检查对 T 的强制转换,以后可能会导致问题。
在大多数情况下,java 类型推断非常可靠,您应该听取编译器警告。
另一方面,反射几乎完全抛弃了 java 类型系统。处理这个有点棘手,但有一些方法可以检查类型是否兼容(例如。Class.isAssignableFrom(Class)
)。