我必须动态地获取其名称在jsp中的下拉列表中可用的表。选择表名后,应打印相应的列。为此,我在jsp中运行一个循环,并尝试是否有可能将"object"类型的对象转换为一个类,其类名仅为已知,然后使用该对象,我必须访问相应的类方法。
ex: className我从jsp得到的是"Book",我有一个类Book.class
,它有一个方法getName()
,所以像这样的东西是我想要的:
Object obj1 = Class.forName(className).cast(obj);
obj1.getName();
这里obj
是我通过会话得到的对象
forName接受一个String,你不能在Object上调用getMethod,因为没有这样的方法。理想情况下,你应该有一个接口来定义在你可以从下拉菜单中选择的所有类型中通用的方法。
如果这不是一个选项,那么有一个更难看的选项使用反射,你实际上不需要提前知道类型:
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);
我不建议在任何生产应用程序中使用这段代码。您将需要相当多的验证和异常处理,以使其安全地工作。 是的,你可以这样做,但对象必须属于那个类或它的一些子类,否则它会给你一个ClassCastException。您还需要传递该类的完整路径,即带有package.
的完全限定类名。Object obj1 = Class.forName(com.Book).cast(obj);
obj1.getName();