Java 在IntelliJ中可能发生的事情不是';在Eclipse中不可能吗?

Java 在IntelliJ中可能发生的事情不是';在Eclipse中不可能吗?,java,eclipse,ide,intellij-idea,Java,Eclipse,Ide,Intellij Idea,我听过一些人说,他们换了一种方式,并且对其中一种方式发誓 作为一个Eclipse的超级粉丝,但还没有时间尝试IntelliJ,我很想听听IntelliJ用户的意见,他们是“前日食主义者”,有些具体的事情你可以用IntelliJ来做,但你不能用Eclipse来做 注意:这不是一个主观问题,也根本不意味着要变成一场圣战请否决任何flamebait答案IntelliJ具有intellisense和从代码到jspx文档的重构支持。IntelliJ调试器有一个非常方便的功能,称为“计算表达式”,这远远优于

我听过一些人说,他们换了一种方式,并且对其中一种方式发誓

作为一个Eclipse的超级粉丝,但还没有时间尝试IntelliJ,我很想听听IntelliJ用户的意见,他们是“前日食主义者”,有些具体的事情你可以用IntelliJ来做,但你不能用Eclipse来做


注意:这不是一个主观问题,也根本不意味着要变成一场圣战请否决任何flamebait答案

IntelliJ具有intellisense和从代码到jspx文档的重构支持。

IntelliJ调试器有一个非常方便的功能,称为“计算表达式”,这远远优于Eclipse。它有完整的代码完成,我认为它通常“更有用”。

IntelliJ有一些非常高级的代码检查(与FindBugs相当,但不同)

尽管我在使用IntelliJ时非常怀念FindBugs插件(Eclipse/FindBugs集成非常酷)

是IntelliJ支持的代码检查的官方列表


编辑:最后,还有一个IntelliJ的例子。它仍然是一个测试版,但是代码检查和FindBugs的结合真是太棒了

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

每当我不得不使用Eclipse,或者看着别人使用Eclipse时,他们似乎可以做我在IntelliJ中可以做的大部分事情,但这需要花费他们更长的时间,而且更笨重

CTRL单击在任何地方都有效 CTRL-click将您带到定义clicked对象的位置,它在任何地方都起作用-不仅在Java代码中的Java类和变量中,而且在Spring配置中(您可以单击类名、属性或bean名),在Hibernate中(您可以单击属性名、类或包含的资源),您可以通过单击从Java类导航到它用作Spring或HibernateBean的位置;单击包含的JSP或JSTL标记也可以工作,ctrl单击JavaScript变量或函数会将您带到它定义的位置,如果有多个位置,则会显示一个菜单,包括HTML或JSP文件中的其他.js文件和js代码

多种语言的自动完成 冬眠 在Hibernate配置(包括类、属性和DB列名)中,在Spring配置中,在HSQL表达式中自动完成

<property name="propName" ref="<hit CTRL-SPACE>"
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>;
}
职能人员(姓名、地址){
this.getName=函数(){return name};
this.getAddress=函数(){return address};
}
Person.prototype.hello=函数(){
从“+this.get”返回“I'm”+this.getName()+”;
}
它只显示getName()和getAddress(),不管您在项目中的其他JS对象中如何使用get*方法,ctrl键单击此项。getName()会将您带到定义此项的位置,即使您的项目中还有其他getName()函数

HTML
我是否提到过自动完成和在文件路径中按ctrl键,比如可能不是什么可以/不能做的问题,而是如何做的问题

例如,两者都有一个编辑器,周围有用于项目、类路径、输出、结构等的停靠面板。但在我开始键入所有这些自动折叠时,让我将注意力集中在它自己的代码上;在eclipse中,所有这些面板都保持打开状态,使我的编辑器区域非常小,约占总可视区域的1/5。因此,我必须抓住鼠标并单击以最小化这些面板中的内容。在eclipse中,整天这样做是一种非常令人沮丧的经历

视图输出窗口的情况正好相反。在Idea中,运行程序会使输出窗口/面板看到程序的输出,即使它被明显地最小化了。在eclipse中,我必须再次抓起鼠标,查找output选项卡并单击它以查看我的程序输出,因为output窗口/面板只是另一个窗口/面板,就像所有其他窗口一样,但实际上它是以一种特殊的方式处理的:“如果用户想要运行他的程序,他很可能希望看到该程序的输出!”当我编写它时,它看起来很自然,但是eclipse在这个基本的用户界面概念上失败了

在eclipse中可能有这样一个快捷方式(编辑时自动隐藏输出窗口,运行程序时自动显示),但与其他数十种功能一样,在Idea中,必须在论坛、在线帮助等中查找快捷方式,这更“自然”

这可以重复几乎所有的功能都有,自动完成,字包装,快速文档查看,一切。我认为Idea中的用户体验要比eclipse中的用户体验愉快得多。“快乐发展”的座右铭终于实现了

Eclipse可以处理更快的大型项目(+300个JAR和+4000个类),我认为IntelliJ Idea 8正致力于此


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

结构搜索和替换

例如,搜索以下内容:

  System.out.println($string$ + $expr$);
其中,$string$是文字,$expr$是my.package.and.Class类型的表达式,然后替换为:

  $expr$.inspect($string$);

如果光标位于某个方法上,则CTRL+SHIFT+I将弹出该方法实现。如果该方法是
接口
方法,则可以使用向上箭头和向下箭头循环实现:

Map<String, Integer> m = ...
m.contains|Key("Wibble");
Map m=。。。
m、 包含|键(“Wibble”);
Where |是(例如)您的
<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>
  System.out.println($string$ + $expr$);
  $expr$.inspect($string$);
Map<String, Integer> m = ...
m.contains|Key("Wibble");
 City city = customer.<ctrl-shift-space twice>
 City city = customer.getAddress().getCity();
List<Person> list = service.listAllPersons();
new ArrayList<String>()
ArrayList<String> stringArrayList = new ArrayList<String>();