最近在看 Java 反射方面的东西 , 为反序列化做准备 . 遇到了如下这个问题 .
我没有系统学过Java , 所以不明白为什么会报错 , 在我看来 , 这两种写法应该是等价的呀?
为什么第一种会报错 cannot find symbol prt(String) 呢 ?
先谢谢各位师傅啦~
最近在看 Java 反射方面的东西 , 为反序列化做准备 . 遇到了如下这个问题 .
我没有系统学过Java , 所以不明白为什么会报错 , 在我看来 , 这两种写法应该是等价的呀?
为什么第一种会报错 cannot find symbol prt(String) 呢 ?
先谢谢各位师傅啦~
拿vim 写java的大佬
解决了 , 问题出在 Object obj = cls.newInstance()
这行
Object
类是所有类的父类 , prt()
方法是 test4
类的方法 , 父类不能直接调用子类的方法 . 所以会提示找不到 prt()
方法
所以将代码改成 test4 obj = (test4) cls.newInstance()
就OK了 .
而下面成功的那行 , test4.class.newInstance()
返回的是 test4
对象 , 而不是 Object
对象 , 所以不会报错 .
果然还是Java基础性错误==
就写个例子
话说这是你自己配的vim还是spacevim
能贴配置看看吗?
来晚了,我之前学反射的时候也遇到了这个问题
你可能是被网上的某些教程误导。。用Object来接受的cls.newInstance()
newInstance();
调用默认构造器实例化对象 返回目标类的实例用Object接收会丢失子类方法,我之前也是用Object接收,然后纠结了好久好久
嗯谢谢 , 现在明白了.
我现在正在学commons collections的几个利用链,学的一头包
好吧,spacevim就算了,我用它写php 折腾了一晚上补全都没搞定
(还是我太菜了)
其实我也没配成补全 … 一般小的测试脚本就拿VIM , 稍微大点的就上IDEA了
真实…