一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法?谢谢。前三个回答是可以,不过依然没有找到我想要的答案。比如在Eclipse里查看别人的jar包里的源码,对于接口调用方法情况,如果直接按ctrl点进去查看源码,往往只能看到接口里方法的声明,无法获知具体调用的是哪个实现类的方法,特别是实现类非常多的情况,虽然这是Java多态的体现,但,有没有工具可以在非调试状态下知道调用是哪个实现类里的方法?
5 回答
哔哔one
TA贡献1854条经验 获得超8个赞
用对象的 getClass()
方法获得它的类,之后就可以随意去判断这是哪个实现类了。
多态是运行时的概念,在运行前是不可能知道究竟会使用哪个实现的。你能做的只是找到所有实现这个 interface 的类然后从逻辑上猜测大概会是哪个。
守候你守候我
TA贡献1802条经验 获得超10个赞
理论上可以,可用reflection等办法。
但据我所知,eclipse不支持你想要的功能。
原因是多态的特性使得对象的真实类型只能到运行时(runtime)才能被JVM确定。而eclipse的绝大多数refactoring和declaration jumping都是基于semantics的,也就是只能依靠在编译时(compile time)所能获得的信息。因此编译时获取的信息有有时只能推断到接口或者父类,这样就无法在编译时确定真实类型。eclipse对此无能为力,intelliJ也不行。
添加回答
举报
0/150
提交
取消