Java运行时类反射

标签 java class

假设我有一个名为 Car 的类,我可以在某些情况下使用以下代码行。

汽车.class

我的问题是,如果用户在运行时提供类名,我可以进行相同类型的调用。尝试过类似于下面的东西,但没有快乐,有什么办法我可以做到这一点。

String className = "Car";
Class.forName(className ).class;

此外,如果用户指定我需要能够动态转换的对象列表,我还需要能够动态转换。

例如而不是 Car myCar = (Car) 对象

我需要能够让用户在运行时指定类的名称/类型,以便我需要能够按照 ClassName myObj = (ClassName) object.

最佳答案

Class.forName("Car") 已返回与 Car.class 相同的结果。

对于转换,您可以使用 Class.forName("Car").cast(object),它将返回一个 Car 对象。看一下 API,主要是其中的 java.lang.Class 部分。

此外,由于您正在强制转换 @runtime,因此没有类型安全性,您应该在执行此操作之前检查 object 是否扩展或实现 Car,否则您将得到一个异常(exception)。 A question I asked ~ a year ago and the answers there可能也与您相关。

虽然,正如其他人已经说过的,这有点奇怪,您可能可以以更好的方式重新设计它,请注意,这种类型的转换通常会非常慢,因为 Java 需要检查类型层次结构(如果无法转换为 Car,则需要抛出 ClassCastException)。

关于Java运行时类反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428479/

相关文章:

java - 如何让Java中的计数器持久化?

php - 未找到“Michelf\Markdown”类

c# - 从类型类列表中删除重复项

从数据表创建 C# 对象

ios - 如何正确初始化类

java - 更新 SQLiteChange 上的 View

Java:如果未知,如何初始化数组大小?

java - 带 Java 的系统托盘

java - 在 Java 中将 double 转换为 BigDecimal

c++ - 这个类有什么问题?