假设我有一个名为 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/