我听过那些已经转向任何一方并且发誓的人。
作为一个巨大的Eclipse粉丝,但没有时间尝试使用IntelliJ,我有兴趣听取IntelliJ用户的说法,他们是“前Eclipsians”,你可以用IntelliJ做一些你无法用Eclipse做的具体事情
注意:这不是一个主观问题,也不意味着变成一场IDE圣战。 请低估任何flamebait答案 。
答案 0 :(得分:185)
答案 1 :(得分:81)
我使用intellij而不是eclipse只有一个原因:可用性
无论是调试,重构,自动完成...... Intellij更易于使用一致的键绑定,可用于查找它们的选项等。功能方面,intellij很难赶上Eclipse因为后者有更多可用的插件,并且易于扩展。
答案 2 :(得分:54)
可能不是 可以/不可以做什么,而是如何。
例如,两者都有编辑器,包括用于项目,类路径,输出,结构等的停靠面板。但是当我开始输入所有这些自动崩溃时,让我专注于它自己的代码;在eclipse中,所有这些面板都保持打开,使我的编辑器区域非常小,大约占总可视区域的1/5。因此,我必须抓住鼠标并单击以最小化这些面板。整天这样做是一次令人沮丧的日食经历。
视图输出窗口发生了完全相反的事情。在Idea运行程序时,输出窗口/面板会查看程序的输出,即使它已经过度使用了。在eclipse中我必须再次抓住我的鼠标并查找输出选项卡并单击它以查看我的程序输出,因为输出窗口/面板只是另一个,就像所有其他窗口一样,但在Idea中它被处理一种特殊的方式:“如果用户想要运行他的程序,很可能他想看到该程序的输出!”我写这篇文章时似乎很自然,但是eclipse在这个基本的用户界面概念中失败了。
可能在eclipse中有一个快捷方式(编辑时自动隐藏输出窗口并在运行程序时自动显示它),但是作为其他几十个功能,快捷方式必须在论坛,在线帮助等中搜索,而在Idea中有一点点更加“自然”。
这可以重复几乎所有功能,自动完成,自动换行,快速文档视图,一切。我认为用户体验在Idea中比在eclipse中更令人愉快。那么座右铭就是“愉快地发展”
Eclipse处理更快的大型项目(+300罐和+4000个类),我认为IntelliJ Idea 8正在研究这个问题。
这一切当然都是主观的。我们如何衡量用户体验?
答案 3 :(得分:45)
Idea 8.0有可爱的 ctrl + shift + space x 2执行以下自动完成:
City city = customer.<ctrl-shift-space twice>
解析为
City city = customer.getAddress().getCity();
通过任意数量的getter / setter。
答案 4 :(得分:33)
不要忘记“与剪贴板比较”。
我在IntelliJ中一直使用的东西,在Eclipse中没有相应的东西。
答案 5 :(得分:31)
我在IntelliJ中最喜欢的快捷方式,在Eclipse中没有相同的东西(我发现)被称为“转到符号”。 CTRL-ALT-SHIFT-N 允许您从整个项目开始输入类型和全局类,方法名,变量名等。
答案 6 :(得分:27)
由于新的Android Studio,我试图切换到IntelliJ。但我现在非常失望。我正在使用Eclipse和 Code Recommanders 插件。这是一个简单的例子,为什么Eclipse非常棒:
我想创建一个新的SimpleTimeZone
。 SimpleTimeZone
没有构造函数,零参数。
Ctrl + Space
IntelliJ 中的
Ctrl + Space
在IntelliJ中,我得不到任何类型的构造函数SimpleTimeZone
的信息。
在Eclipse中输入之后
我得到之前选择的构造函数,其中填充了预定义的变量名称。我可以看到每个论点的类型。使用Code Recommanders Eclipse通过当前作用域中先前定义的变量类型猜测正确的构造函数,并使用这些变量填充构造函数。
在IntelliJ中输入之后没有任何反应。我得到一个空的构造函数。我必须按 Ctrl + P 才能看到预期的参数。
答案 7 :(得分:25)
如果您将光标放在方法上,则 CTRL + SHIFT + I 将弹出方法实现。如果方法是interface
方法,那么您可以使用向上和向下箭头循环实现:
Map<String, Integer> m = ...
m.contains|Key("Wibble");
其中|是(例如)光标所在的位置。
答案 8 :(得分:24)
IntelliJ有一些非常高级的代码检查(与FindBugs相当但不同)。
虽然我在使用IntelliJ时非常想念FindBugs插件(Eclipse / FindBugs集成非常酷)。
Here是IntelliJ支持的CodeInspections的官方列表
编辑:最后,IntelliJ有一个findbugs-plugin。它仍然有点测试,但Code Inspections和FindBugs的组合真棒!
答案 9 :(得分:16)
远远更远的重构。
答案 10 :(得分:15)
有许多想法以更简单的方式解决,或者没有相应的东西:
自动完成操作:执行 ctrl + shift + a ,您可以通过键盘调用任何创意操作,而无需记住其键组合...在Windows中考虑gnome-do或launchy,以及你有这个主意!此外,此功能支持CamelCasing缩写;)
搁架:让您轻松分开一些代码,然后通过差异查看器查看它们。
本地历史:管理得更好,更简单。
SVN注释和历史记录:检查更简单,您也可以轻松查看整个源文件的这一部分的历史记录。
在任何地方自动填充,例如评估表达式和断点条件窗口。
Maven整合......更多,更简单,更完整。
重构更接近手部,例如循环插入,包装/转换,重命名和添加变量。
发现功能强大且组织良好。即使在大项目中也是如此
同时与一个大项目的几个分支一起工作非常稳定(作为分支源的1.5Gb的前错误修正器,并且需要同时使用它们,想法显示其坚如磐石的能力)
更清洁,更简单的界面...
而且,只使用键盘更简单,无需使用鼠标即可实现大量简单操作,节省时间并让您更专注于代码......重要之处!
现在,作为开源...... Idea用户群将呈指数级增长。
答案 11 :(得分:15)
我经常使用的一件事是设置一个断点,然后控制它的作用。 (在我上一份工作中,大多数人都使用了Eclipse ...我记得很惊讶没有人能在Eclipse中找到如何做到这一点。)
例如,可以让断点实际上不会停止,而只是将消息记录到控制台。这意味着,我不必使用“System.out.println(...)”丢弃我的代码,然后重新编译。
答案 12 :(得分:14)
结构搜索和替换。
例如,搜索类似:
的内容 System.out.println($string$ + $expr$);
其中$ string $是文字,$ expr $是my.package.and.Class类型的表达式,然后替换为:
$expr$.inspect($string$);
答案 13 :(得分:13)
就这个帖子而言,我的时间可能有些偏差,但我只需要回应。
我是一个巨大的日食迷 - 使用它,因为它是第一次出现。一位朋友(10年前)告诉我,这将是一名球员。他是对的。
然而!我刚刚开始使用IntelliJ,如果你还没有看到或使用变更列表 - 你就错过了编程天堂。
跟踪我已更改的文件的能力(在我的开发分支上是清晰的)是我在eclipse的插件中寻找的东西。 Intellij跟踪单个提交的所有更改,非常简单。您可以使用自定义列表隔离更改的文件。我将它用于本地必须唯一的配置文件,但在我同步或与存储库进行比较时会不断标记 - 将它们列在更改列表下,我可以监视它们,但是整齐地将它们收起来让我可以专注于真正的添加我正在制作。
此外,还有一个提交日志插件,可以为那些未与您的错误跟踪软件集成的SCCS输出所有更改的文本。将日志粘贴到故障单的工作历史记录中可捕获文件,其版本,日期/时间以及分支/标记。这太酷了。
所有这些都可以通过eclipse中的插件(或未来的增强功能)得到支持,我打赌;然而,Intellij让这变得轻而易举。
最后,我对这款产品的主流热爱感到非常兴奋 - 按键,所以这很痛苦,但很有趣。
答案 14 :(得分:12)
IntelliJ调试器有一个非常方便的功能叫做“评估表达式”,这比日食挂件要好得多。它有完整的代码完成,我认为它通常“更有用”。
答案 15 :(得分:11)
嗯,对我来说这是一千个小事。一些宏,一般在Eclipse中的GUI布局我觉得很糟糕。我无法在Eclipse中的不同窗口中打开多个项目。我可以打开多个项目,但是当我切换文件时,基于视图的系统会在我身上交换一堆东西。 IntelliJ的代码检查似乎更好。它的弹出助手来解决常见问题很好。很多简单易用的东西,比如我可以悬停在热点上的侧栏,它会告诉我每个实现的方法的子类或我正在实现的方法以及从哪里开始。
每当我不得不使用或看到有人使用Eclipse时,似乎他们可以完成我在IntelliJ中可以完成的大部分工作,但它需要更长时间并且更笨拙。
答案 16 :(得分:9)
介绍变量。 (Windows上的 Ctrl + Alt + V ,OSX上的 Cmd + Alt + V )
让我们说你打电话给方法,service.listAllPersons()
按 Ctrl + Alt + V 和输入,并插入方法调用返回值的变量:
List<Person> list = service.listAllPersons();
保存您的输入,您无需检查所调用方法的返回类型。使用泛型时特别有用,例如
new ArrayList<String>()
[引入变量]
ArrayList<String> stringArrayList = new ArrayList<String>();
(当然你可以在点击 Enter 之前轻松更改变量的名称)
答案 17 :(得分:8)
IntelliJ具有智能感知和重构支持,从代码到jspx文档。
答案 18 :(得分:7)
对我来说,这是IDEA的maven支持,特别是在版本9中是首屈一指的。项目与maven模型的即时同步非常棒,使开发变得愉快。
答案 19 :(得分:6)
Intellij拥有比Subversive或Subclipse更优越的SVN插件,它可以工作!我们浪费了使用Eclipse合并源文件的时间并没有考虑到。这不是IntelliJ的问题,因为该插件可以为您提供更多帮助。
Subclipse插件也是不可靠的 - 我们经常有插件不认为其他开发人员已经将任何代码签入SVN的实例,但是有 - CI服务器已处理它们了!
答案 20 :(得分:4)
VIM 模拟器。此插件在IDEA中编辑文件时提供几乎完整的vi / vim / gvim仿真。 支持以下功能:
的有关此插件的一些评论 由于这个插件,我看不到回到任何其他ide。 两全其美...太棒了! 这就是我在所有IDE中都缺乏的。
答案 21 :(得分:4)
我认为其中一个优点是依赖结构矩阵: http://www.jetbrains.com/idea/features/dependency_analysis.html#link0
对Lattix网站(独立产品)中的DSM使用和优势有一个很好的介绍: http://www.lattix.com/files/dl/slides/s.php?directory=4tour
答案 22 :(得分:3)
其他一些事情:
答案 23 :(得分:2)
有一件事情,IntelliJ比Eclipse更好,而且你的口袋里空了!
我喜欢使用它,它对Eclipce的一大优势是它与文件系统同步的方式,对于大型项目和慢速计算机(是的,在工作环境中,PC比我们家的慢很多)尽管初始索引时间较慢,Eclipse似乎很难在IntelliJ看起来更快。
IntelliJ社区版显然可以免费使用它,但你很快就会想要那些额外的重构和不包含在CC版中的好东西。
在我看来,它通常是一种更好的用户体验,但是它的价值是否是每个开发者自己回答的问题。
但是,我们要感谢我们现在最多有三个适用于Java的IDE,NetBeans一直在变得更好。
答案 24 :(得分:2)
Data flow analysis:程序间逆流分析和正向流分析,如here所述。我的经验基于Community Edition,它可以很好地进行数据流分析。在代码非常复杂的情况下,它很少(拒绝做任何事情)。
答案 25 :(得分:2)
首先,我喜欢intellij。日食缺少至少有一百个功能。我在可靠性和智能方面的表现更好,在重构,重命名,移动和其他已经提到过的内容时,没有夸张的描述。
但是,有一件事intellij不允许哪个日食。它不允许在同一个vm下一次运行多个项目。
如果你有前面,中间,核心,代理等单独的项目,他们都必须互相交流,你不能同时快速修改和调试,afaik。我目前应对此问题的唯一方法是使用ant脚本在依赖项目中部署和更新jar,或使用maven。
Eclipse允许在一个ide vm实例下调试多个项目。
答案 26 :(得分:2)
我的回答序言:我对Eclipse的使用是有限的。我们需要Java IDE才能在Windows和Mac上运行,并且Mac端口日复一日地放慢速度。这是多年前的事,我相信现在还可以。但这就是让我们切换到IntelliJ的原因,我们对它很满意。
现在我的答案:我还没有看到的一个很大的区别是IntelliJ / Jet Brains的技术支持更好。我们发送电子邮件给JetBrains,并在不到一个小时内得到最终答复。寻找Eclipse问题的答案导致通常的“你这个愚蠢的白痴”答案(通常是少数回复)以及更多有见地,有帮助的回复。但需要进行一些整理以获得真正的答案。
答案 27 :(得分:2)
我一直在IntelliJ中使用的东西就是我输入的重构。我使用两个IDE重新编写了打印输出(最初用eclipse编写)的类,我使用了大约40%的击键/鼠标点击来在IntelliJ中编写相同的类而不是eclipse。
我不想使用Eclipse,直到他们支持使用不完整的代码进行重构。
以下是IntelliJ 8.0 / 8.1 [http://www.jetbrains.com/idea/features/index.html]
中较长的功能列表答案 28 :(得分:2)
一个非常有用的功能是能够部分构建Maven反应器项目,以便只包含您需要的部件。
为了使这一点更加清晰,请考虑使用overlay technique在他们之间共享许多公共资源(例如JavaScript,Spring配置文件等)的WAR文件集合的情况。如果您正在处理一些网页(在Jetty中运行)并想要更改一些单独模块中保存的覆盖代码,那么您通常希望必须停止Jetty,运行Maven构建,再次启动Jetty并且继续。这是Eclipse的情况,几乎与我合作过的所有其他IDE。 IntelliJ不是这样。使用项目设置,您可以定义要在后台构建中包含哪个模块的哪个方面。因此,您最终会得到一个看似无缝的流程。您可以对项目中的任何代码进行更改,并在刷新浏览器后立即可用。
非常整洁,非常快。
我无法想象在没有它的情况下将YUI备份到DWR / SpringMVC上的前端编码。
答案 29 :(得分:2)
IntelliJ所做的两件事对Eclipse来说并不是非常有价值的东西:
方法分隔符:方法之间的那些微弱的灰色线使代码很多更具可读性
文本消除锯齿:使代码在IDE中看起来很漂亮
答案 30 :(得分:1)
我最近发现至少有两个关于Eclipse的IntelliJ IDEA优势。
如果试图在JSP代码编辑器中使用代码格式化,那么JSP scriptlet就会被破坏。 Eclipse变得有点疯狂,它会在这里和那里随机广告代码。 IDEA的表现非常好。
另一件事是在JBoss服务器上部署应用程序的速度。 IntelliJ正在替换JBoss的tmp文件夹中的应用程序,因此重新部署非常快。 Eclipse WTP正在替换deploy文件夹中的应用程序,事实证明,该文件夹持续时间更长。
答案 31 :(得分:1)
目前,它是唯一可以将标签撕成另一个窗口的标签。当你有更多的屏幕时很方便。
答案 32 :(得分:0)
从Maven POM打开一个项目。 只需选择“打开项目...”导航到顶级pom.xml并按Enter键:) NetBeans现在也具有此功能。
答案 33 :(得分:0)
我不记得Eclipse中是否可以使用word / line / method / class wrap
在Intellij Idea中,您使用 Ctrl + W
答案 34 :(得分:0)
很抱歉,如果已经涵盖了这一点,但只是在“更改”标签中我可以看到我的本地更改,传入的更改,远程更改只是我不能没有的东西..在Eclipse中,我可以'找到这样的功能!
同样只是一个简单的事情,比如中间点击与'开放声明'相关联,这是一个很棒的UI添加 - 我在Eclipse中也看不到它。
我的工作场所只有Eclipse,但我正在考虑购买个人创意许可证....
答案 35 :(得分:0)
在IntelliJ中,可以跳过使用“最后编辑位置”编辑的最后位置的历史记录。 Eclipse具有类似的功能,但Eclipse只能返回到一个级别的编辑位置。
拥有历史而不仅仅是Eclipse提供的一个级别是一个很好的生产力功能:它充当自动书签的一种形式,因为您经常想要跳回到您一直在进行更改的位置。我每天都会使用这种技能几次,当我被要求使用Eclipse做某事时,我会感到没有它的痛苦。
答案 36 :(得分:0)
在所有答案中都很明显,两者中有许多不同的功能和工作流程。但是,我认为在决定使用哪个框架时,还要考虑每个工具可以提高的总体生产率。
我是Netbeans和Eclipse的忠实粉丝,已经使用了很多年。它们是很好的工具,根据你的工作,你可能想要选择其中一种。
然而,大约六个月前,在处理涉及HMT5 ui的大量javascript前端代码的复杂java web项目时,由于js自动完成错误,我被迫寻找Eclipse的替代品。我非常绝望,我正在考虑回到一个简单的文本编辑器来获取我的js代码!!!
幸运的是,我遇到了Intellij Idea(不幸的是没时间研究工具)。
虽然需要一些时间来适应Idea的做事方式,除了特殊功能之外,它提供的左右小物品的生产力提升是我认为最大的资产。它对我来说效果更好,我现在是Idea Ultimate的订阅付费客户。一旦你习惯了这一点,很难回到其他任何地方。
没有什么能比得上自由,而且我是开源的狂热粉丝,但最终如果你以此为生,那么每次都能更快地完成任务。
答案 37 :(得分:0)
我认为你可以坚持使用这些IDE中的任何一个。 最好的标志是不要担心错过你未使用的IDE中的巨大好处&#34;我们在Eclipse粉丝和IntelliJ粉丝之间看到了很长的争论。这是一个好兆头,双方拥有几乎相同的力量,这使得这一长期讨论得以生存。
答案 38 :(得分:-1)
我没有使用IntellijIdea编写很多代码,但是在IntellijIdea中你可以看到括号之间的代码块( if,try / catch,cycle等等)从哪里开始以及在哪里完成。
在Eclipse中(我在Eclipse 3.2中编写代码),您只能手动识别块。
答案 39 :(得分:-1)
Alt + Insert 以列模式编辑文本。
答案 40 :(得分:-2)
显示导航栏ALT-Home。