java - 类(class)类型转换出错了?

标签 java reflection

好的。我正在为我的 java 程序做一些反射(reflection),但我被困在一个看似简单但不起作用的部分。

这是我正在尝试做的事情:

Thread t = new Thread();
System.out.println("Casting "+Thread.class.getName()+" to "+Runnable.class.getName());
Object newThread = Runnable.class.cast(t);
System.out.println("New class: "+newThread.getClass().getName());

预期的输出是 新类:java.lang.Runnable,但是,它返回新类:java.lang.Thread

我做错了什么? (请注意,在这种情况下我不能通过括号使用正常的转换)

最佳答案

您必须了解对象引用类型的转换是什么。像普通类型转换一样,Class's cast method不会改变对象的实际类型。它产生一个引用该对象的适当类型的引用变量,该对象未更改。

Thread t 仍然是一个Thread。 Actor 阵容确实有效,因为Thread implements Runnable ,否则将抛出 ClassCastException。但它仍然是一个线程

关于java - 类(class)类型转换出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600059/

相关文章:

java - 如何访问类的动态创建对象的方法和属性

java - 将 JApplet 嵌入到 JFrame 中

java - Mac LWJGL 显示无最大化选项

java - 如何防止通过反射访问?

reflection - Golang帮助反射获取值

reflection - 如何确定该类型实现了哪些协议(protocol)?

java - 运行依赖项 : java could not find or load the main class OSMImportTool 的 jar 文件

java - 将 ID 列表传递给 SQL 语句

java - 如何在 JPA 和 EJB3 中使用 JDBC ClientInfo

c# - 具有循环依赖的静态字段的反射 GetValue 返回 null