3

我不确定这个问题是否属于这里。我编写了以下方法将对象转换为特定类型。

private static <T> T cast(Object obj) {
    return (T) (obj);
}

我想知道为什么我在 Guava 或 Apache Commons 中找不到这种方法?我错过了什么吗?

谢谢,

文克

4

2 回答 2

7

您可以使用带有方法的标准转换方法

SomeClass o = SomeClass.class.cast(obj);  

没有理由使用你的方法

SomeClass o = Utils.<SomeClass>cast(obj);
于 2013-09-16T19:02:21.263 回答
1

因为它不是类型保存的。特别是 Guava 旨在最大限度地利用 java 的静态类型。使用您的方法,可以将任何类的对象转换为任何其他类的对象。这是不应该做的。

如果你想尝试以下

Integer a = (Integer) "1";

编译器会理所当然地抱怨。如果您使用您的 cast 方法,您将摆脱编译错误并将错误推迟到运行时。这绝不是一个好主意。此外,编译器会警告您未检查对 T 的强制转换,以后可能会导致问题。

在大多数情况下,java 类型推断非常可靠,您应该听取编译器警告。

另一方面,反射几乎完全抛弃了 java 类型系统。处理这个有点棘手,但有一些方法可以检查类型是否兼容(例如。Class.isAssignableFrom(Class))。

于 2013-09-28T15:00:26.063 回答