首页 文章

IntelliJ中可能的东西在Eclipse中是不可能的?

提问于
浏览
366

我听过那些已经转向任何一方并且发誓的人 .

作为一个巨大的Eclipse粉丝,但没有时间尝试使用IntelliJ,我有兴趣听到IntelliJ用户是“前Eclipsians”,你可以用IntelliJ做一些你不能用Eclipse做的具体事情 .

Note :这不是一个主观问题,也不意味着变成一场IDE圣战 . Please downvote any flamebait answers .

30 回答

  • 8

    IntelliJ有一些非常先进的代码检查(与FindBugs相当但不同) .

    虽然我在使用IntelliJ时非常想念FindBugs插件(Eclipse / FindBugs集成非常酷) .

    Here是IntelliJ支持的CodeInspections的正式列表

    编辑:最后,IntelliJ有一个findbugs-plugin . 它仍然有点测试,但Code Inspections和FindBugs的组合真棒!

  • 4

    我在IntelliJ中一直使用的东西是在我键入时重构 . 我使用两个IDE从打印输出(最初用eclipse编写)重写了类,我使用了大约40%的击键/鼠标点击来在IntelliJ中编写相同的类而不是eclipse .

    在不完整的代码片段支持尽可能多的重构之前,我不想使用Eclipse .

    以下是IntelliJ 8.0 / 8.1中更长的功能列表[http://www.jetbrains.com/idea/features/index.html]

  • 9

    嗯,对我来说这是一千个小事 . 一些宏,一般在Eclipse中的GUI布局我觉得很糟糕 . 我无法在Eclipse中的不同窗口中打开多个项目 . 我可以打开多个项目,但是当我切换文件时,基于视图的系统会在我身上交换一堆东西 . IntelliJ的代码检查似乎更好 . 它的弹出助手来解决常见问题很好 . 很多简单易用的东西,比如我可以悬停在热点上的侧栏,它会告诉我方法的每个实现子类或我正在实现的方法以及从哪里开始 .

    每当我不得不使用或者看到有人使用Eclipse时,似乎他们可以完成我在IntelliJ中可以做的大部分事情,但它需要更长时间并且更笨拙 .

  • 27

    IntelliJ具有智能感知和重构支持,从代码到jspx文档 .

  • 6

    其他一些事情:

    更改方法签名时

    • 传播参数/异常,非常便于更新调用堆栈内部的方法

    • 作为jdbc调用的参数传递的字符串中的SQL代码验证(以及整个新捆绑的语言注入内容)

    • 在接口和类(及其方法)和智能实现导航(Ctrl Alt Click或Ctrl Alt B)的图标中实现/覆盖
      EJB 2.1接口和bean类之间的

    • 链接(包括重构支持);旧的,但在处理旧项目时仍然非常有 Value

  • 12

    一个非常有用的功能是能够部分构建Maven反应器项目,以便只包含您需要的部件 .

    为了使这一点更加清晰,请考虑使用overlay technique在它们之间共享许多公共资源(例如JavaScript,Spring配置文件等)的WAR文件集合的情况 . 如果您正在处理某个网页(在Jetty中运行)并想要更改某个单独模块中的某些覆盖代码,那么您_208978已经使用过 . IntelliJ不是这样 . 使用项目设置,您可以定义要在后台构建中包含哪个模块的哪个方面 . 因此,您最终会得到一个看似无缝的流程 . 您对项目中的任何代码进行了更改,并在刷新浏览器后立即可用 .

    非常整洁,而且非常快 .

    我无法想象在没有它的情况下将YUI支持到DWR / SpringMVC之类的前端编码 .

  • 24

    VIM 模拟器 . 此插件在IDEA中编辑文件时提供几乎完整的vi / vim / gvim仿真 . 支持以下功能:

    • 动作键

    • 删除/更改

    • 插入模式命令

    • 马克斯

    • 登记册

    • VIM撤消/重做

    • 可视模式命令

    • 一些Ex命令

    • 一些:设置选项

    • 用于搜索和搜索/替换的完整VIM正则表达式

    • Diagraphs

    • 命令行历史记录

    • 搜索记录

    • 跳候选

    • VIM帮助

    关于这个插件的一些评论来自http://plugins.jetbrains.net/plugin/?id=164
    我可以__8989_是我在所有IDE中都缺乏的东西 .

  • 11

    不要忘记“与剪贴板比较” .

    我在IntelliJ中一直使用的东西,在Eclipse中没有相应的东西 .

  • 185

    如果您将光标放在方法上,则按CTRL SHIFT我将弹出方法实现 . 如果方法是 interface 方法,那么您可以使用向上和向下箭头循环实现:

    Map<String, Integer> m = ...
    m.contains|Key("Wibble");
    

    哪里|是(例如)光标所在的位置 .

  • 54

    IntelliJ所做的两件事对我来说并不是非常有 Value 的:

    方法分隔符:方法之间的那些微弱的灰色线使代码更具可读性

    文本消除锯齿:使代码在IDE中看起来很漂亮

  • 14

    我使用intellij而不是eclipse只有一个原因:可用性

    无论是调试,重构,自动完成.. Intellij使用一致的键绑定更容易,在你寻找它们时可用的选项等等 . 功能方面,intellij很难赶上Eclipse,因为后者还有更多插件可用intellij,并且易于扩展 .

  • 25

    对我来说,这是IDEA的maven支持,特别是在版本9中是首屈一指的 . 项目与maven模型的即时同步非常棒,使开发变得愉快 .

  • 2

    我在IntelliJ中最喜欢的快捷方式,它在Eclipse中没有对应的东西(我've found) is called '转到符号' . CTRL-ALT-SHIFT-N允许你从整个项目开始输入类和全局类,方法名,变量名等 .

  • 2

    我经常使用的一件事是设置一个断点,然后控制它的作用 . (在我上一份工作中,大多数人都使用Eclipse ...我记得很惊讶没有人能在Eclipse中找到如何做到这一点 . )

    例如,可以让断点实际上不会停止,而只是将消息记录到控制台 . 这意味着,我不必使用“System.out.println(...)”丢弃我的代码,然后重新编译 .

  • 7

    介绍变量 . (Windows上的Ctrl Alt V,OSX上的Cmd Alt V)

    让我们说你调用一个方法, service.listAllPersons() 按Ctrl + V和Enter键,并插入方法调用返回值的变量:

    List<Person> list = service.listAllPersons();
    

    保存您的输入,您不必检查您正在调用的方法的返回类型 . 在使用泛型时特别有用,例如

    new ArrayList<String>()
    

    [引入变量]

    ArrayList<String> stringArrayList = new ArrayList<String>();
    

    (当然,您可以在按Enter键之前轻松更改变量的名称)

  • 15

    我的回答的序言:我对Eclipse的使用是有限的 . 我们需要Java IDE才能在Windows和Mac上运行,并且Mac端口日复一日地放慢速度 . 这是多年前的事,我相信现在还可以 . 但这就是让我们切换到IntelliJ的原因,我们对此感到满意 .

    现在我的回答:我还没有看到的一个很大的区别是IntelliJ / Jet Brains的技术支持更好 . 我们发送电子邮件给JetBrains并在不到一个小时内得到明确答复 . 寻找Eclipse问题的答案导致通常的“你这个愚蠢的白痴”答案(通常是少数回复)以及更多有见地,有帮助的回复 . 但需要进行一些整理以获得真正的答案 .

  • 15

    由于新的Android Studio,我试图切换到IntelliJ . 但是我'm very disappointed now. I'使用Eclipse和 Code Recommanders 插件 . 这是一个简单的例子,为什么Eclipse如此棒:

    我想创建一个新的 SimpleTimeZone . SimpleTimeZone 没有带零参数的构造函数 .

    Eclipse中的Ctrl Space

    enter image description here

    IntelliJ中的Ctrl空格

    enter image description here

    在IntelliJ中,我没有得到什么样的构造函数 SimpleTimeZone .

    在Eclipse中输入后

    enter image description here

    我得到之前选择的构造函数填充预定义的变量名称 . 我可以看到每个论点的类型 . 使用Code Recommanders Eclipse通过当前作用域中先前定义的变量类型猜测正确的构造函数,并使用这些变量填充构造函数 .

    输入IntelliJ后没有任何反应 . 我得到一个空的构造函数 . 我必须按Ctrl P才能看到预期的参数 .

    enter image description here

  • 2

    IntelliJ调试器有一个非常方便的功能,称为“评估表达式”,远远好于日食挂件 . 它有完整的代码完成,我认为它通常“更有用” .

  • 33

    可能不是 what 可以/不能做的事,但 how .

    例如,两者都有编辑器,包括用于项目,类路径,输出,结构等的停靠面板 . 但在Idea中,当我开始自动键入所有这些崩溃时,让我专注于它自己的代码;在eclipse中,所有这些面板都保持打开,使我的编辑器区域非常小,大约占总可视区域的1/5 . 因此,我必须 grab 鼠标并单击以最小化这些面板 . 整天这样做是在日食中非常令人沮丧的经历 .

    与视图输出窗口完全相反的事情发生了 . 在Idea运行程序时,输出窗口/面板可以查看程序的输出,即使它是最近最小化的 . 在eclipse中我必须再次 grab 我的鼠标并查找输出选项卡并单击它以查看我的程序输出,因为输出窗口/面板只是另一个,就像所有其他窗口一样,但在Idea中它被处理一种特殊的方式:“如果用户想要运行他的程序,很可能他想看到该程序的输出!”我写它时看起来很自然,但是eclipse在这个基本的用户界面概念中失败了 .

    可能在eclipse中有一个快捷方式(编辑时自动隐藏输出窗口并在运行程序时自动显示它),但是正如其他几十个功能快捷方式必须在论坛,在线帮助等中搜索,而在Idea中更加“自然” .

    这可以重复几乎所有功能,自动完成,自动换行,快速文档视图,一切 . 我认为用户体验在Idea中比在eclipse中更令人愉快 . 然后座右铭成真“快乐发展”

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

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

  • 13

    远,远,更多的重构 .

  • 3

    Intellij有一个比Subversive或Subclipse更优越的SVN插件,它的工作原理!我们浪费时间使用Eclipse合并源文件的时间并没有考虑到 . 这不是IntelliJ的问题,因为该插件可以为您提供更多帮助 .

    另外Subclipse插件是不可靠的 - 我们经常有插件不认为其他开发人员已经检查过任何代码到SVN的实例,但是有 - CI服务器已处理它们!

  • 2

    有许多想法以更简单的方式解决,或者没有相应的东西:

    • 自动完成操作:执行ctrl shift a你可以通过键盘调用任何想法动作而不记住它的键组合...想想在Windows中的gnome-do或launchy,你就有了这个想法!此外,此功能支持CamelCasing缩写;)

    • Shelf:让你轻松分开一些代码,然后通过diff查看器查看它们 .

    • 本地历史:管理得更好,更简单 .

    • SVN注释和历史:更易于检查,并且您还可以轻松查看整个源文件的此类部分的历史记录 .

    • 无处不在的自动填充,例如evaluate表达式和断点条件窗口 .

    • Maven集成......更简单,更简单,集成度更高 .

    • 重构更接近手部,例如循环插入,包装/转换,重命名和添加变量 .

    • 发现功能强大且组织良好 . 即使是大项目

    • 同时与一个大项目的几个分支一起工作很稳定(作为分支源的1.5Gb的前错误修正器,并且需要同时使用它们,想法显示其坚如磐石的能力)

    • 更清洁,更简单的界面......

    • 而且,只使用键盘更简单,无需使用鼠标即可完成大量简单操作,节省您的时间并让您更专注于代码......重要的地方!

    现在,作为开源...... Idea用户群将呈指数级增长 .

  • 45

    我认为的一个好处是 Dependency Structure Matrixhttp://www.jetbrains.com/idea/features/dependency_analysis.html#link0

    有's a good introduction to DSM usage and benefits in Lattix'网站(独立产品):http://www.lattix.com/files/dl/slides/s.php?directory=4tour

  • 4

    CTRL-单击可在任何地方使用

    CTRL-click使你到达定义点击对象的地方无处不在 - 不仅在Java类和Java代码中的变量,而且在Spring配置中(你可以点击类名,属性或bean名),在Hibernate中(你可以单击属性名称或类或包含的资源),您可以在Java类中单击导航到它用作Spring或Hibernate bean的位置;单击包含的JSP或JSTL标记也可以工作,按住CTR变量或函数可以将它带到它定义的位置,或者如果有多个地方则显示菜单,包括HTML或JSP中的其他.js文件和JS代码文件 .

    许多语言的自动完成

    Hibernate

    在Spring配置中,在HQLnate配置(包括类,属性和数据库列名称)中自动完成HSQL表达式

    <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对象的*方法,然后按住Ctrl键单击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>
    

    在所有项目中进行索引搜索 .

    您可以使用任何Java类或方法的Find Usages,它将找到它的使用位置,不仅包括Java类,还包括Hibernate,Spring,JSP和其他地方 . 重命名方法重构不仅在Java类中重命名方法,而且在任何地方(包括注释)都重命名(它不能确定注释中的字符串是否真的是方法名称,因此它会询问) . 即使存在具有相同名称的另一个类的方法,它也只会找到您的方法 . 良好的源代码控制集成(SVN是否支持更改列表?IDEA支持每个源代码控制),能够使用您的更改创建补丁,以便您可以将更改发送给其他团队成员而无需提交 .

    改进了调试器

    当我在调试器's watch window, I see logical view - keys and values, last time I did it in Eclipse it was showing entries with hash and next fields - I'中查看HashMap时,我并没有真正调试HashMap,我只是想看一下它的内容 .

    Spring&Hibernate配置验证

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

    上次我试过,我无法在Windows XP x64上运行Eclipse .

    它会建议你person.name或person.address . 按住Ctrl键并单击person.name,它将导航到Person类的getName()方法 .

    键入 Pattern.compile(""); put \,按CTRL-SPACE并查看有关可以放入正则表达式的有用提示 . 你也可以在这里使用语言注入 - 定义你自己的方法,它接受字符串参数,在IntelliLang选项对话框中声明你的参数是正则表达式 - 它也会在那里给你自动完成 . 不用说它突出了不正确的正则表达式 .

    其他功能

    我不确定Eclipse中是否存在很少的功能 . 但至少我们团队中使用Eclipse的每个成员也使用一些合并工具将本地更改与源控件(通常是WinMerge)的更改合并 . 我从来不需要它 - 在IDEA中合并对我来说已经足够了 . 通过3次点击,我可以看到源代码管理中的文件版本列表,通过3次点击,我可以比较以前的版本,或者上一个版本和当前版本,并可能合并 .

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

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

  • 81

    Idea 8.0具有可爱的ctrl移位空间x 2,可执行以下自动完成:

    City city = customer.<ctrl-shift-space twice>
    

    解决了

    City city = customer.getAddress().getCity();
    

    通过任何级别的getter / setter .

  • 2

    Data flow analysis:程序间逆流分析和正向流分析,如here所述 . 我的经验基于Community Edition,它可以很好地进行数据流分析 . 在代码非常复杂的情况下,它很少失败(拒绝做任何事情) .

  • 16

    结构搜索和替换 .

    例如,搜索类似的内容:

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

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

    $expr$.inspect($string$);
    
  • 2

    IntelliJ有一件事比Eclipse好得多,而且你的口袋里空了!

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

    IntelliJ社区版显然是免费使用它,但你很快就会想要那些额外的重构和不包含在CC版中的好东西 .

    在我看来,它通常是一个更好的用户体验,但它是否值得花费是每个开发人员回答自己的问题 .

    但是,让我们感激,我们现在拥有最多三个适用于Java的IDE,NetBeans一直在变得更好 .

  • 2

    首先,我喜欢intellij . 日食缺少至少有一百个功能 . 在可靠性和智能方面,我说的是更好的,在重构,重命名,移动和其他已经提到的内容时,没有任何夸张的描述 .

    但是,有一件事intellij不允许哪个日食 . 它不允许在同一个vm下一次运行多个项目 .

    如果你有前面,中间,核心,代理等单独的项目,他们都必须互相交流,你不能同时快速修改和调试,afaik . 我目前应对此问题的唯一方法是使用ant脚本在依赖项目中部署和更新jar,或者使用maven .

    Eclipse允许在一个ide vm下调试多个项目实例 .

  • 31

    就这个帖子而言,我的时间可能有些偏差,但我只需要回应 .

    我是一个巨大的日食爱好者 - 使用它,因为它是第一次出现 . 一位朋友(10年前)告诉我,这将是一名球员 . 他是对的 .

    然而!我刚刚开始使用IntelliJ,如果你还没有看过或使用 changelists ,你就错过了编程天堂 .

    跟踪我已更改的文件的能力(在我的开发分支ala clearcase上)是我在eclipse插件中寻找的东西 . Intellij可以非常轻松地跟踪单个提交的所有更改 . 您可以使用自定义列表隔离更改的文件 . 我将它用于本地必须唯一的配置文件,但是当我同步或与存储库进行比较时会不断标记 - 将它们列在更改列表下,我可以监视它们,但是整齐地将它们收起来让我可以专注于真正的添加我正在做 .

    此外,还有一个Commit Log插件,可以为那些未与您的错误跟踪软件集成的SCCS输出所有更改的文本 . 将日志粘贴到故障单的工作历史记录中可捕获文件,其版本,日期/时间以及分支/标记 . 地狱很酷 .

    所有这些都可以通过eclipse中的插件(或未来的增强功能)来支持,我打赌;然而,Intellij让这变得轻而易举 .

    最后,我对这款产品的主流热爱感到非常兴奋 - 按键,所以这很痛苦,但很有趣 .

相关问题