一个Java方面的小问题~

最近在看 Java 反射方面的东西 , 为反序列化做准备 . 遇到了如下这个问题 .

我没有系统学过Java , 所以不明白为什么会报错 , 在我看来 , 这两种写法应该是等价的呀?

为什么第一种会报错 cannot find symbol prt(String) 呢 ?

先谢谢各位师傅啦~ :joy:

拿vim 写java的大佬
OIP

1 个赞

解决了 , 问题出在 Object obj = cls.newInstance() 这行

Object 类是所有类的父类 , prt() 方法是 test4 类的方法 , 父类不能直接调用子类的方法 . 所以会提示找不到 prt() 方法

所以将代码改成 test4 obj = (test4) cls.newInstance() 就OK了 .

而下面成功的那行 , test4.class.newInstance() 返回的是 test4 对象 , 而不是 Object 对象 , 所以不会报错 .

果然还是Java基础性错误==

就写个例子 :joy:

话说这是你自己配的vim还是spacevim

能贴配置看看吗?

来晚了,我之前学反射的时候也遇到了这个问题

你可能是被网上的某些教程误导。。用Object来接受的cls.newInstance()

newInstance();调用默认构造器实例化对象 返回目标类的实例用Object接收会丢失子类方法,我之前也是用Object接收,然后纠结了好久好久

嗯谢谢 , 现在明白了. :joy:

用的是 SpaceVIM , 插件我是照着文档装的 , 也不清楚实际装的有没有用 . :joy:

2020-04-10_17-28

我现在正在学commons collections的几个利用链,学的一头包

好吧,spacevim就算了,我用它写php 折腾了一晚上补全都没搞定
(还是我太菜了)

其实我也没配成补全 … 一般小的测试脚本就拿VIM , 稍微大点的就上IDEA了 :joy:

真实…


服务器资源由ZeptoVM赞助

Partners Wiki Discord