2017-12-14 1 views
0

Ich benutze Eclipse. Ich verwende oft java.util.Objects.requireNonNull(T,String), um auf Nicht-Nullheit zu prüfen und eine Ausnahme mit einer entsprechenden Nachricht zu werfen, wenn param null ist.Wie transformiere ich schnell einen Ausdruck in einen Null-Check?

Zum Beispiel, wenn ich generiere einen Konstruktor mit Hilfe von Eclipse:

public Person(String firstName,String lastName){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 

Bei Parametern obligatorisch sind (nicht alle auch sein mag) Ich möchte es zu etwas ändern robustere

public Person(String firstName,String lastName){ 
    this.firstName = requireNonNull(firstName,"firstName is required"); //static import omitted 
    this.lastName = requireNonNull(lastName,"lastName is required"); 
} 

Zur Zeit habe ich meine Regex & ersetzen feststellen, dass ich manuell verwenden und vorsichtig:

Search: (\w+) (assuming variables do not use underscores) 
Replace: requireNonNull\($1,"$1 is required"\) 

Das manuelle Anwenden, insbesondere mit einem Semikolon ; am Ende von beiden, hilft mir, automatisch generierte Konstruktoren und Setter zu transformieren.

Meine Frage ist auf ein höheres Niveau zu bewegen: Sie wissen, ob es möglich ist, Tastenanschläge oder Klicks zu reduzieren, indem ein Makro oder etwas anderes verwenden (keine benutzerdefinierten Plugins, wenn möglich, bitte), so dass der Editor Auswahl wird in einen requireNonNull Aufruf umgewandelt?

z.

public Person(String firstName,String lastName){ 
    this.firstName = __firstName__; //__ means editor highlight 
    this.lastName = lastName; 
} 

Wird

import static java.util.Objects.*; 

public Person(String firstName,String lastName){ 
    this.firstName = requireNonNull(firstName,"firstName is required"); 
    this.lastName = lastName; 
} 

Z.B.

public Person(Individual other){ //Individual might carry null values out of my control 
    requireNonNull(other); 
    this.firstName = __other.getFirstName()__; //__ means editor highlight 
    this.lastName = other.getLastName(); 
} 

Wird

public Person(Individual other){ 
    requireNonNull(other); 
    this.firstName = requireNonNull(other.getFirstName(),"other.getFirstName() is required"); //I may modify the text later, but this is a good starting point 
    this.lastName = other.getLastName(); 
} 

Die Zugabe des statischen Imports in die Quelldatei ist nicht zwingend erforderlich, dh kann ich Favorites verwenden lassen Eclipse mir den Import hinzufügen, nachdem Literale ersetzt wurde

Antwort

2

Sie können Eclipse Code Vorlagen verwenden. Gehen Sie zu Einstellungen> Java> Editor> Vorlagen und erstellen Sie eine neue Vorlage für den Java-Kontext. Deaktivieren Sie „Automatisch einfügen“ und fügen Sie den folgenden Code in das Muster Feld:

${:importStatic('java.util.Objects.requireNonNull')}requireNonNull(${word_selection}, "${word_selection} is required")${cursor} 

Jetzt können Sie diese Vorlage, indem Sie die Variable im Code zugreifen Sie zweimal ersetzen wollen und + Raum drücken Sie Strg.

Side Hinweis: Sie sollten sich vielleicht Project Lombok ansehen. Unter anderem führt sie eine @NonNull Anmerkung, die automatisch diese nullchecks bei der Kompilierung einfügt, so kann man Sachen wie dies zu tun:

public Person(@NonNull String firstName, @NonNull String lastName){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 
+0

Großen. Leider funktioniert es mir nicht, da STRG + Leerzeichen bei Auswahl nichts tut. Wenn ich am Ende des Variablennamens zweimal STRG-Leerzeichen eingebe, bekomme ich "Keine Vorlagenvorschläge". Das macht mich besorgt über eine beschädigte Arbeitsplatzkonfiguration. Wird daran arbeiten –

Verwandte Themen