如果只有一个实现,我该如何直接访问该实现界面?

41

我经常需要调试Java代码,这些代码是这样编写的:有一个接口和恰好一个该接口的实现。

例如,可能有一个名为Foo的接口,恰好有一个名为FooImpl的实现。在下面的代码中,如果我按Ctrl单击doThings,它会跳转到Foo.java,但实际上我想要跳转到FooImpl.java,以查看实现。

public void doStuff(Foo foo) {
    foo.doThings();
}   
当我进入接口时,我必须使用Ctrl-Shift-R打开FooImpl。如果我可以像在doThings上按Ctrl-Alt单击一样做些事情,并进入FooImpl.java内部,那就真的太好了。如果工作区中有多个实现,则可能会弹出一个框告诉我它们是什么。

在Eclipse中是否有插件或现有功能可以实现这一点?我知道我可以转到Foo.java,然后获取层次结构并转到实现,但当只有一个接口实现时,这比必要的点击更多。


有人知道在Netbeans中如何做到这一点吗? - Tom Neyland
2
@Tnay http://wiki.netbeans.org/JavaGoToImplementation@Tnay http://wiki.netbeans.org/JavaGoToImplementation - Stephen Denne
有一个插件可以使“打开实现”更容易。http://eclipse-tools.sourceforge.net/implementors/download.html - Jackie
5个回答

58
  1. 将光标移动到方法调用处
  2. 按下 Ctrl + T
  3. 选择所需的实现
  4. 按下 Enter

如果有多个实现,也可以使用此方法。


1
天啊,我已经想了好几年怎么做这个,非常感谢!回想起来似乎很明显。 - matt b
这很好!如果只有一种实现,它直接跳转到实现会更好,但是这比我之前做的要好得多。 - HappyEngineer
1
正如@StephenDenne所指出的那样,当你在接口方法名称上使用Ctrl + hover时,你可以选择“打开声明”或“打开实现”。如果你选择后者,它将直接跳转到唯一的实现类或(如果有多个)打开类型层次结构,以便你可以选择要跳转到哪个实现类。 - hotshot309

29

转到窗口 > 首选项 > 常规 > 编辑器 > 文本编辑器 > 超链接,取消勾选打开声明Preferences screenshot

从现在开始,当您将鼠标悬停在方法名称上并按住Ctrl键时,将显示以下弹出窗口。只需单击方法名称即可打开实现(或一个实现XXX的类型框,如果存在多个实现)。

Popup box

仍然可以通过按F3使用打开声明功能。


这就是我一直在寻找的!谢谢! - mate00

19
在Eclipse 3.5中,当你按住Control键悬停在doThings上时,会弹出一个框,提供两个选项可供点击:
  • 打开声明
  • 打开实现
Eclipse 3.5 JDT 新特性页面的第二部分有一张截图:

alt text


1
非常好的提示。我想补充一点,你可以在“首选项”->“通用”->“键”->“打开实现”下轻松绑定此功能键。这类似于实现插件,但在我看来现在已经过时了。 - rwojtech
1
这个功能被称为超链接。 - Circuit in the wall

15

Implementors插件可以完美地实现你的需求。如果只有一个实现,它将直接打开它;否则,它会让你选择。


1
Meritron和Stephen提供的解决方案都非常好,但是你的解决方案恰好给了我想要的!我可以按一个键跳转到实现!它默认映射到alt-f3,但我将其更改为ctrl-alt-t,以便与Meritron提供的解决方案一起使用。谢谢! - HappyEngineer
不客气!打开声明的默认键盘快捷键是F3,所以我猜插件作者选择Alt+F3作为类似功能的快捷键可能是因为这个原因,但自然你可以选择最适合你的快捷键。 - Micke
@Micke 那个插件能在最新的 Eclipse 版本,如 LunaMars 上运行吗? - Kasun Siyambalapitiya
此插件不支持更新的 Eclipse 版本。请查看下面 @morgan-courbet 的更好解决方案。 - andrej
在一个更复杂的类和接口层次结构中,它只显示最顶层的实现,而不是我期望的那个。 - MarianP

0
在 Eclipse IDE for C/C++ Developers Version: Oxygen.3a Release (4.7.3a) 中,我看到了 Ctrl+Tab(切换源代码/头文件),这对我有用(虽然不是直接的,但是可以解决问题)。

Toggle Source/Header


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接