Class clazz = Class.forName("com.csust.shopcar.entity.Departement"); Object obj = clazz.newInstance(); Method method = clazz.getMethod("setDeptno", Integer.class); method.invoke(obj, 1);
谢谢……有点懂了,我主要是想要了解它的工作原理,怎么实现的……
你前面obj.setDeptno(int)不可以,其实是编译器不允许。它忠实地往obj的声明类型java.lang.Object而不是实际类型com.csust.shopcar.entity.Departement里面去找setDeptno(int)方法,找不到,所以编译不通过。 而后面invoke之所以可以,是因为这个时候已经是运行期。运行环境自动到obj的真实类型com.csust.shopcar.entity.Departement里面去找相关的方法clazz.getMethod(...),如果找不到,找它的父类,再找不到,再向上... 区别就是编译期,只看声明的类型,而运行期看实际的类型
你用obj.setDeptno之所以不行,那是因为obj句柄被申明成Object类型了,而Object类型没有setDeptno方法,但是obj指向的对象实际上Department类型的。这其实就是多态啊。
62,629
社区成员
307,259
社区内容
加载中
试试用AI创作助手写篇文章吧