java - 为什么我要使用 java.lang.Class.cast

标签 java generics language-construct

我最近偶然发现了一段这样的代码:

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 的几个使用示例:

关于java - 为什么我要使用 java.lang.Class.cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900410/

相关文章:

java - 为什么我可以使用 Scala REPL 中的 Java 库而不是脚本中的?

java - 在java小程序中创建xml文档

swift - 使用 Swift 生成整数二进制表示?

java - token 上的语法错误扩展了预期

java - java泛型代码是在运行时为所使用的每种类型复制的还是java使用类型转换?

scala - 为什么 Scala 支持影子变量?

java - Hbase 按列限定符排序

java - 二维字符串数组b 学生记录程序

php - PHP echo 源码在哪里实现的?

c# - 为了维护起见,是否应该避免某些编程构造(和其他)?