Java强制转换方法

时间:2013-09-16 18:50:43

标签: java guava apache-commons

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

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

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

谢谢,

Venk

2 个答案:

答案 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))。