为了账号安全,请及时绑定邮箱和手机立即绑定

Java通过接口调用方法的时候,怎么知道调用的是哪个实现类里的方法?

Java通过接口调用方法的时候,怎么知道调用的是哪个实现类里的方法?

噜噜哒 2019-03-27 22:15:51
一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法?谢谢。前三个回答是可以,不过依然没有找到我想要的答案。比如在Eclipse里查看别人的jar包里的源码,对于接口调用方法情况,如果直接按ctrl点进去查看源码,往往只能看到接口里方法的声明,无法获知具体调用的是哪个实现类的方法,特别是实现类非常多的情况,虽然这是Java多态的体现,但,有没有工具可以在非调试状态下知道调用是哪个实现类里的方法?
查看完整描述

5 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

用对象的 getClass() 方法获得它的类,之后就可以随意去判断这是哪个实现类了。


多态是运行时的概念,在运行前是不可能知道究竟会使用哪个实现的。你能做的只是找到所有实现这个 interface 的类然后从逻辑上猜测大概会是哪个。


查看完整回答
反对 回复 2019-04-15
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

也可以使用instanceof判断


查看完整回答
反对 回复 2019-04-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

反射 or 把所有类都创建单个实例用hashmap存储


查看完整回答
反对 回复 2019-04-15
?
守候你守候我

TA贡献1802条经验 获得超10个赞

理论上可以,可用reflection等办法。

但据我所知,eclipse不支持你想要的功能。
原因是多态的特性使得对象的真实类型只能到运行时(runtime)才能被JVM确定。而eclipse的绝大多数refactoring和declaration jumping都是基于semantics的,也就是只能依靠在编译时(compile time)所能获得的信息。因此编译时获取的信息有有时只能推断到接口或者父类,这样就无法在编译时确定真实类型。eclipse对此无能为力,intelliJ也不行。


查看完整回答
反对 回复 2019-04-15
  • 5 回答
  • 0 关注
  • 6234 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信