365 Stimmen

Sind in IntelliJ Dinge möglich, die in Eclipse nicht möglich sind?

Ich habe von Leuten gehört, die auf die eine oder andere Weise gewechselt haben und auf die eine oder andere schwören.

Da ich ein großer Eclipse-Fan bin, aber noch nicht die Zeit hatte, IntelliJ auszuprobieren, bin ich daran interessiert, von IntelliJ-Anwendern, die "Ex-Eclipse-Anwender" sind, zu erfahren, welche spezifischen Dinge man mit IntelliJ machen kann, die man mit Eclipse nicht machen kann.

Nota : Dies ist keine subjektive Frage und soll keineswegs zu einem heiligen Krieg des IDE werden. Bitte bewerten Sie alle Flamebait-Antworten herunter .

185voto

Pavel Feldman Punkte 4451

CTRL-Klick funktioniert überall

Der STRG-Klick, der Sie zu dem Ort bringt, an dem das angeklickte Objekt definiert ist, funktioniert überall - nicht nur in Java-Klassen und Variablen im Java-Code, sondern auch in der Spring-Konfiguration (Sie können auf den Klassennamen oder die Eigenschaft oder den Bean-Namen klicken), in Hibernate (Sie können auf den Eigenschaftsnamen oder die Klasse oder die eingebundene Ressource klicken), Sie können mit einem Klick von der Java-Klasse dorthin navigieren, wo sie als Spring- oder Hibernate-Bean verwendet wird; Ein Klick auf ein eingebundenes JSP- oder JSTL-Tag funktioniert ebenfalls, ein Strg-Klick auf eine JavaScript-Variable oder -Funktion bringt Sie zu der Stelle, an der sie definiert ist, oder zeigt ein Menü an, wenn es mehr als eine Stelle gibt, einschließlich anderer . js-Dateien und JS-Code in HTML- oder JSP-Dateien.

Autovervollständigung für viele Sprachen

Winterschlaf

Autocomplete in HSQL-Ausdrücken, in der Hibernate-Konfiguration (einschließlich Klassen-, Eigenschafts- und DB-Spaltennamen), in der Spring-Konfiguration

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

und es wird Ihnen eine Liste der Beans angezeigt, die Sie in diese Eigenschaft einfügen können.

Java

Sehr intelligente Autovervollständigung in Java-Code:

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

und es zeigt Ihnen NUR getName() , getAddress() y toString() (nur sie sind vom Typ her kompatibel) und getName() steht in der Liste an erster Stelle, weil sie einen aussagekräftigeren Namen hat. Die neueste Version 8, die sich noch in der EAP befindet, hat eine noch intelligentere Autovervollständigung.

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>

und es wird automatisch zu

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

Javascript

Intelligente automatische Vervollständigung in 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>;
}

und es zeigt NUR getName() y getAddress() , egal wie viele get*-Methoden Sie in anderen JS-Objekten in Ihrem Projekt haben, und klicken Sie mit der Strg-Taste auf this.getName() bringt Sie dorthin, wo dieser definiert ist, auch wenn es noch andere getName() Funktionen in Ihrem Projekt.

HTML

Habe ich schon das automatische Ausfüllen und das Klicken mit der Strg-Taste in Dateipfaden erwähnt, wie <script src="", <img src="", usw.?

Autovervollständigung in HTML-Tag-Attributen. Autovervollständigung im Style-Attribut von HTML-Tags, sowohl Attributnamen als auch Werte. Automatische Vervollständigung auch in Klassenattributen.
Geben Sie <div class="<CTRL-SPACE> ein und es wird Ihnen eine Liste der in Ihrem Projekt definierten CSS-Klassen angezeigt. Wählen Sie eine aus, klicken Sie darauf und Sie werden dorthin weitergeleitet, wo sie definiert ist.

Einfache Hervorhebung der eigenen Sprache

Die neueste Version verfügt über Sprachinjektion, so dass Sie erklären können, dass Ihr benutzerdefiniertes JSTL-Tag normalerweise JavaScript enthält, und es wird JavaScript darin hervorgehoben.

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

Indizierte Suche über alle Projekte hinweg.

Sie können Find Usages für eine beliebige Java-Klasse oder -Methode verwenden und es findet heraus, wo sie verwendet wird, und zwar nicht nur in Java-Klassen, sondern auch in Hibernate, Spring, JSP und an anderen Stellen. Rename Method Refactoring benennt Methoden nicht nur in Java-Klassen um, sondern überall, auch in Kommentaren (es kann nicht sicher sein, ob der String in den Kommentaren wirklich ein Methodenname ist, also wird es nachfragen). Und es findet nur Ihre Methode, auch wenn es Methoden einer anderen Klasse mit demselben Namen gibt. Gute Integration in die Versionsverwaltung (unterstützt SVN Änderungslisten? IDEA unterstützt sie für jede Versionsverwaltung), Möglichkeit, einen Patch mit Ihren Änderungen zu erstellen, so dass Sie Ihre Änderungen an andere Teammitglieder senden können, ohne sie zu committen.

Verbesserter Debugger

Wenn ich mir anschaue HashMap im Watch-Fenster des Debuggers sehe ich die logische Ansicht - Schlüssel und Werte, das letzte Mal, als ich es in Eclipse tat, zeigte es Einträge mit Hash- und Next-Feldern - ich bin nicht wirklich am Debuggen HashMap Ich möchte mir nur den Inhalt ansehen.

Validierung der Spring- und Hibernate-Konfiguration

Es validiert die Spring- und Hibernate-Konfiguration direkt beim Bearbeiten, so dass ich den Server nicht neu starten muss, um zu wissen, dass ich einen Klassennamen falsch geschrieben oder einen Konstruktorparameter hinzugefügt habe, so dass meine Spring-CFG ungültig ist.

Bei meinem letzten Versuch konnte ich Eclipse unter Windows XP x64 nicht ausführen.

und es wird Ihnen vorgeschlagen Person.Name o person.adresse . Ctrl-Klick auf Person.Name und es wird Sie zu folgenden Seiten führen getName() Methode der Person Klasse.

Typ Pattern.compile(""); setzen. \\ drücken Sie die Tastenkombination STRG-LEERTASTE und Sie erhalten einen hilfreichen Hinweis, was Sie in Ihren regulären Ausdruck eingeben können. Sie können auch Sprachinjektion hier verwenden - definieren Sie Ihre eigene Methode, die String-Parameter nimmt, deklarieren Sie im IntelliLang-Optionen-Dialog, dass Ihr Parameter ein regulärer Ausdruck ist - und es wird Ihnen auch dort Autovervollständigung geben. Unnötig zu erwähnen, dass es falsche reguläre Ausdrücke hervorhebt.

Andere Merkmale

Es gibt ein paar Funktionen, bei denen ich mir nicht sicher bin, ob sie in Eclipse vorhanden sind oder nicht. Aber zumindest jedes Mitglied unseres Teams, das Eclipse verwendet, benutzt auch ein Zusammenführungswerkzeug, um lokale Änderungen mit Änderungen aus der Versionskontrolle zusammenzuführen, normalerweise WinMerge. Ich brauche es nie - mir reicht das Zusammenführen in IDEA. Mit 3 Klicks kann ich die Liste der Dateiversionen in der Versionskontrolle sehen, mit 3 weiteren Klicks kann ich frühere Versionen oder frühere und aktuelle Versionen vergleichen und möglicherweise zusammenführen.

Damit kann ich angeben, dass ich alle .jars innerhalb von WEB-INF\lib Ordner, ohne jede Datei einzeln auszuwählen. Wenn also jemand eine neue .jar-Datei in diesen Ordner überträgt, wird sie automatisch mitgenommen.

Das oben genannte ist wahrscheinlich nur 10 % dessen, was es tut. Ich verwende Maven, Flex, Swing, EJB und viele andere Dinge nicht, so kann ich nicht sagen, wie es mit ihnen hilft. Aber es tut.

81voto

amit Punkte 10341

Es gibt nur einen Grund, warum ich intellij und nicht eclipse verwende: Benutzerfreundlichkeit

Ob Debugging, Refactoring, automatische Vervollständigung Intellij ist viel einfacher zu bedienen, mit konsistenten Tastenbelegungen, Optionen, die dort verfügbar sind, wo man sie sucht usw. Was die Funktionen angeht, wird es für Intellij schwierig sein, mit Eclipse gleichzuziehen, da letzteres viel mehr Plugins zur Verfügung hat als Intellij und leicht erweiterbar ist.

54voto

OscarRyz Punkte 189898

Wahrscheinlich geht es nicht um was kann/kann nicht getan werden, aber wie .

Zum Beispiel haben beide einen Editor, der von Andockfeldern für Projekt, Klassenpfad, Ausgabe, Struktur usw. umgeben ist. Aber in Idea, wenn ich beginne, alle diese kollabieren automatisch lassen Sie mich auf den Code selbst konzentrieren; In Eclipse alle diese Panels offen halten, so dass mein Editor Bereich sehr reduziert, etwa 1/5 der gesamten sichtbaren Bereich. Ich muss also mit der Maus klicken, um diese Bereiche zu minimieren. Doing dies den ganzen Tag lang ist eine sehr frustrierende Erfahrung in Eclipse.

Das genaue Gegenteil passiert mit dem Ausgabefenster der Ansicht. In Idea wird beim Ausführen eines Programms das Ausgabefenster/Panel angezeigt, auch wenn es zuvor minimiert wurde. In Eclipse muss ich wieder mit der Maus nach dem Ausgabe-Reiter suchen und ihn anklicken, um die Programmausgabe zu sehen, weil das Ausgabefenster/Panel nur ein weiteres Fenster ist, wie alle anderen Fenster auch, aber in Idea wird es auf besondere Weise behandelt: "Wenn der Benutzer sein Programm ausführen will, will er höchstwahrscheinlich auch die Ausgabe des Programms sehen!" Es scheint so natürlich, wenn ich es schreibe, aber eclipse versagt bei diesem grundlegenden Konzept der Benutzeroberfläche.

Wahrscheinlich gibt es dafür eine Abkürzung in Eclipse (Ausgabefenster während der Bearbeitung automatisch ausblenden und beim Ausführen des Programms automatisch anzeigen), aber wie bei einigen anderen Funktionen muss die Abkürzung in Foren, Online-Hilfe usw. gesucht werden, während sie in Idea etwas "natürlicher" ist.

Dies lässt sich für fast alle Funktionen wiederholen, die beide haben: Autovervollständigung, Zeilenumbruch, Schnellansicht der Dokumentation, alles. Ich denke, dass die Benutzererfahrung in Idea viel angenehmer ist als in Eclipse. Da bewahrheitet sich das Motto "Entwickeln mit Freude".

Eclipse kommt mit größeren Projekten schneller zurecht (+300 Jars und +4000 Klassen) und ich glaube, IntelliJ Idea 8 arbeitet daran.

All dies ist natürlich subjektiv. Wie können wir die Nutzererfahrung messen?

44voto

krosenvold Punkte 73093

Idea 8.0 hat die schöne ctrl+shift+space x 2, der die folgende automatische Vervollständigung vornimmt:

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

beschließt

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

durch eine beliebige Anzahl von Ebenen von Gettern/Settern.

33voto

Daniel Alexiuc Punkte 12816

Vergessen Sie nicht "mit der Zwischenablage vergleichen".

Etwas, das ich in IntelliJ ständig verwende und das in Eclipse keine Entsprechung hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X