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