我听说有人选择了其中一种方式,并对其中一种方式发誓。

作为一个Eclipse的忠实粉丝,但没有时间尝试IntelliJ,我很有兴趣从“前Eclipse用户”IntelliJ用户那里听到一些用IntelliJ可以做而用Eclipse不能做的具体事情。

注意:这不是一个主观的问题,也不意味着变成一场IDE圣战。请为任何煽动性的答案投票。


当前回答

多得多的重构。

其他回答

结构搜索和替换。

例如,搜索如下内容:

  System.out.println($string$ + $expr$);

其中$string$是一个文字,$expr$是my.package.and.Class类型的表达式,然后替换为:

  $expr$.inspect($string$);

有一件事IntelliJ做得比Eclipse好得多,那就是清空你的口袋!

然而,我确实更喜欢使用它,它比Eclipse有一个很大的优势,就是它与文件系统同步的方式,对于大项目和慢速的计算机(是的,在工作环境中,PC的速度比我们家里的慢得多),Eclipse似乎与IntelliJ相比似乎更快,尽管初始索引时间较慢。

IntelliJ社区版显然可以免费使用它,但你很快就会想要那些额外的重构和CC版不包含的小东西。

在我看来,这通常是一个更好的用户体验,但是否值得这个成本是每个开发者自己要回答的问题。

但是让我们感激我们现在有三个很棒的Java ide, NetBeans一直在变得更好。

CTRL-click在任何地方都适用

CTRL-click that brings you to where clicked object is defined works everywhere - not only in Java classes and variables in Java code, but in Spring configuration (you can click on class name, or property, or bean name), in Hibernate (you can click on property name or class, or included resource), you can navigate within one click from Java class to where it is used as Spring or Hibernate bean; clicking on included JSP or JSTL tag also works, ctrl-click on JavaScript variable or function brings you to the place it is defined or shows a menu if there are more than one place, including other .js files and JS code in HTML or JSP files.

自动完成许多语言

Hibernate

在HSQL表达式、Hibernate配置(包括类、属性和DB列名)、Spring配置中自动完成

<property name="propName" ref="<hit CTRL-SPACE>"

它会显示你可以注入到属性中的bean列表。

Java

Java代码中非常智能的自动完成:

interface Person {
    String getName();
    String getAddress();
    int getAge();
}
//---
Person p;
String name = p.<CTRL-SHIFT-SPACE>

它显示你只有getName(), getAddress()和toString()(只有他们是类型兼容)和getName()是第一个在列表中,因为它有更多相关的名称。EAP的最新版本8拥有更智能的自动补全功能。

interface Country{
}
interface Address {
    String getStreetAddress();
    String getZipCode();
    Country getCountry();
}
interface Person {
    String getName();
    Address getAddress();
    int getAge();
}
//--- 
Person p;
Country c = p.<CTRL-SHIFT-SPACE>

它会自动完成到

Country c = p.getAddress().getCountry();

Javascript

JavaScript中的智能自动完成。

function Person(name,address) {
    this.getName = function() { return name };
    this.getAddress = function() { return address };
}

Person.prototype.hello = function() {
    return "I'm " + this.getName() + " from " + this.get<CTRL-SPACE>;
}

并且它只显示getName()和getAddress(),不管你在你的项目中的其他JS对象中如何使用get*方法,ctrl-click this.getName()将带你到这个定义的地方,即使在你的项目中有一些其他的getName()函数。

HTML

我提到过自动完成和按ctrl键点击文件路径,比如<script src="", <img src="",等等?

自动完成HTML标签属性。自动完成HTML标签的样式属性,包括属性名和值。在类属性中也可以自动完成。 输入<div class="<CTRL-SPACE>,它将显示您在项目中定义的CSS类列表。选择一个,按ctrl键单击它,您将被重定向到它定义的位置。

轻松凸显自己的语言

最新版本有语言注入,所以你可以声明你自定义的JSTL标签通常包含JavaScript,它会突出显示其中的JavaScript。

<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>

跨所有项目的索引搜索。

You can use Find Usages of any Java class or method and it will find where it is used including not only Java classes but Hibernate, Spring, JSP and other places. Rename Method refactoring renames method not only in Java classes but anywhere including comments (it can not be sure if string in comments is really method name so it will ask). And it will find only your method even if there are methods of another class with same name. Good source control integration (does SVN support changelists? IDEA support them for every source control), ability to create a patch with your changes so you can send your changes to other team member without committing them.

改进的调试器

当我在调试器的监视窗口中查看HashMap时,我看到逻辑视图-键和值,上次我在Eclipse中做了它,它显示了带有哈希和下一个字段的条目-我不是真正调试HashMap,我只是想看看它的内容。

Spring和Hibernate配置验证

它在编辑时验证Spring和Hibernate配置,所以我不需要重新启动服务器来知道我拼错了类名,或者添加了构造函数参数,所以我的Spring cfg无效。

上次尝试时,我无法在Windows XP x64上运行Eclipse。

它会提示你person。name或person。address。 Ctrl-click Person .name,它将导航到Person类的getName()方法。

类型Pattern.compile (" ");输入\\在那里,点击CTRL-SPACE,看看你可以在正则表达式中输入什么的有用提示。你也可以在这里使用语言注入——定义你自己的接受字符串参数的方法,在IntelliLang选项对话框中声明你的参数是正则表达式——它也会给你自动补全。不用说,它突出了不正确的正则表达式。

其他功能

有几个特性我不确定Eclipse中是否存在。但是至少我们团队中使用Eclipse的每个成员,也使用一些合并工具来合并本地更改和来自源代码控制的更改,通常是WinMerge。我从来不需要它——合并到IDEA对我来说就足够了。通过3次点击,我可以看到源代码控制中的文件版本列表,通过3次点击,我可以比较以前的版本,或者以前和当前的版本,并可能合并。

它允许指定我需要WEB-INF\lib文件夹中的所有。jar文件,而不单独选择每个文件,因此当有人提交新的。jar文件到该文件夹时,它会自动选择它。

上面提到的可能是它所做的10%。我不使用Maven、Flex、Swing、EJB和其他很多东西,所以我不知道它对它们有什么帮助。但确实如此。

可能不是能做/不能做的问题,而是如何做的问题。

例如,两者都有编辑器围绕码头面板的项目,类路径,输出,结构等。但在Idea中,当我开始输入所有这些自动折叠时让我专注于代码本身;在eclipse中,所有这些面板都保持打开,使我的编辑器区域非常小,大约是总可视区域的1/5。所以我必须抓住鼠标,点击来最小化这些面板。在日食中,整天这样做是一种非常令人沮丧的经历。

The exact opposite thing happens with the view output window. In Idea running a program brings the output window/panel to see the output of the program even if it was perviously minimized. In eclipse I have to grab my mouse again and look for the output tab and click it to view my program output, because the output window/panel is just another one, like all the rest of the windows, but in Idea it is treated in a special way: "If the user want to run his program, is very likely he wants to see the output of that program!" It seems so natural when I write it, but eclipse fails in this basic user interface concept.

可能在eclipse中有一个快捷方式(编辑时自动隐藏输出窗口,运行程序时自动显示),但由于其他几十个功能,快捷方式必须在论坛,在线帮助等中寻找,而在Idea中则更“自然”一些。

这可以重复几乎所有的功能,自动完成,自动换行,快速文档查看,一切。我认为在Idea中的用户体验要比在eclipse中的用户体验愉快得多。那么,“快乐地发展”这句格言就成为现实了。

Eclipse可以处理更快的大型项目(+300个jar和+4000个类),我认为IntelliJ Idea 8正在处理这个问题。

当然,所有这些都是主观的。我们如何衡量用户体验?

回答的序言:我对Eclipse的使用是有限的。我们需要一个Java IDE在Windows和Mac上都能运行,而Mac的移植速度越来越慢。这是几年前的事了,我相信现在没问题了。但这正是我们转向IntelliJ的原因,我们对它很满意。

现在是我的答案:我还没有看到提到的一个很大的区别是,IntelliJ/Jet Brains的技术支持更好。我们向JetBrains发送电子邮件,并在不到一个小时内得到明确的答复。寻找Eclipse问题的答案通常会得到“你这个愚蠢的白痴”的答案(通常是一小部分回答),同时还有大量有见解的、有帮助的回答。但要得到真正的答案还需要一些梳理。