我们可以将一个对象转换成一个名字只知道的 class 类型吗?

Can we cast a object into a class type whose name is only known?

我必须动态获取 jsp 下拉列表中的 table 个名称。选择 table 名称后,应打印相应的列。为此,我在 jsp 中 运行 循环并尝试,但是是否可以将 "Object" 类型的对象转换为 class 其 class 名称仅为已知,然后使用该对象我必须访问相应的 class 方法。

ex: class我从 jsp 得到的名字是 "Book" 我有一个 class Book.class 有一个方法 getName()所以这就是我想要的:

 Object obj1 =  Class.forName(className).cast(obj);
 obj1.getName();

这里obj是我通过session得到的对象

是的,您可以这样做,但该对象必须属于那个 class 或其某些子对象 class,否则它会给您一个 ClassCastException。您还需要传递 class 的完整路径,表示完全限定的 class 名称与包。

Object obj1 =  Class.forName(com.Book).cast(obj);
obj1.getName();

forName 接受一个 String 并且你不能在 Object 上调用 getMethod 因为没有这样的方法。理想情况下,您应该有一个接口来定义在您可以从下拉列表中 select 的所有类型中通用的方法。

如果这不是一个选项,那么有一个使用反射的更丑陋的选项,您实际上不需要提前知道类型:

Class<?> clazz = Class.forName("Book");
// Object obj1 = clazz.cast(obj);
// The method getName() is undefined for the type Object

Method m = clazz.getMethod("getName");
String res = (String) m.invoke(obj);

不过,我不建议像在任何生产应用程序中那样使用此代码。您需要大量的验证和异常处理才能安全地进行这项工作。