我最近偶然发现了一段这样的代码:
Object o = .. ;
Foo foo = Foo.class.cast(o);
实际上我什至不知道 java.lang.Class 有一个 cast 方法,所以我查看了文档,从我收集到的内容中,它只是对 Class 对象所代表的类进行了转换。所以上面的代码大致相当于
Object o = ..;
Foo foo = (Foo)o;
所以我想知道,为什么我要使用 cast 方法而不是简单地进行“旧方式”的强制转换。有没有人举个例子说明使用 cast 方法比使用简单的 cast 更有效?
最佳答案
我不认为它经常像你展示的那样被使用。我见过的最常见的用途是使用泛型的人试图做与此等价的事情:
public static <T extends Number> T castToNumber(Object o) {
return (T)o;
}
由于类型删除,这并没有真正做任何有用的事情。
虽然这可行,并且是类型安全的(模 ClassCastExceptions
):
public static <T extends Number> T castToNumber(Object o, Class<T> clazz) {
return clazz.cast(o);
}
编辑:google guava 的几个使用示例:
- MutableClassToInstanceMap
- 在Throwables#propagateIfInstanceOf 中使用可爱, 对于类型安全 通用抛出规范
关于java - 为什么我要使用 java.lang.Class.cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900410/