2014-04-10 13 views
16

Ich habe eine Frage bezüglich der Verwendung von @Nullable Annotation in Java.Verwendung von @Nullable in Java

Nach dem, was ich gelesen habe, ist es eine gute Übung, Methoden zu verwenden, die einen Nullwert zurückgeben können. Auf diese Weise kann die IDE bei der Erkennung einiger Nullzeiger-Ausnahmefehler helfen oder die Entfernung unnötiger Nullzeiger-Ausnahmeprüfungen vorschlagen, wenn @NotNull verwendet wird.

So weit so gut, aber was ist mit @Nullable für Methodenparameter? Ist das eine gute Übung oder wird der Code noch ausführlicher (wenn er mit final verwendet wird) und der Vorteil kann fehlen, da Sie nicht immer wissen, welche Argumente an den Funktionsaufruf übergeben werden? Wie ist Ihre Meinung zur Verwendung von mit Setter-Methoden?

Die Verwendung bezieht sich auf eine Situation bei der Arbeit in einem Unternehmen und nicht auf ein kleines Projekt (wie eine Hausaufgabe).

+0

Mögliche Duplikate von [nullable annotation usage] (http://stackoverflow.com/questions/14076296/nullable-annotation-usage) – ifloop

+3

Ich denke, genau wie vorzeitige Optimierung gibt es einen guten Fall gegen Ihren Code voll stopfen Anmerkungen, die Probleme lösen, die Sie nicht wirklich haben. (Zum Preis, dass die Lesbarkeit radikal reduziert wird.) Aber das ist nur meine persönliche Meinung, keine definitive Antwort. – biziclop

+1

@ifLoop Es ist definitiv kein Duplikat: Die andere Frage fragt, wie es funktioniert, dieser fragt, ob es weise oder hilfreich ist, es zu benutzen. – biziclop

Antwort

7

Aufgrund der inhärenten Komplexität wird die Flussanalyse am besten in kleinen Blöcken durchgeführt. Das Analysieren einer Methode zu einer Zeit kann mit einer guten Werkzeugleistung durchgeführt werden - während die gesamte Systemanalyse für den Eclipse-Java-Compiler nicht möglich ist. Der Vorteil ist: Die Analyse ist schnell und kann inkrementell durchgeführt werden, so dass der Compiler Sie direkt während der Eingabe warnen kann. Die Down-Seite: die Analyse kann nicht "sehen", welche Werte (null oder nicht null) zwischen Methoden (als Parameter und Rückgabewerte) fließen.

Hier kommen null Anmerkungen ins Spiel. Durch Angabe eines Methodenparameters wie @NonNull können Sie dem Compiler mitteilen, dass Sie an dieser Position keinen Nullwert haben möchten.

Reference

Reference 2

Verbrauch: Diese link explains welche Anmerkung zu verwenden, wo.

Nutzungs 2

Getters/Setters: Ja, es ist möglich. Das Projekt Lombok (http://projectlombok.org/index.html) definiert Anmerkungen zum Generieren von Getter/Setter und mehr.

So zum Beispiel

@lombok.Data; 
public class Person { 
    private final String name; 
    private int age; 
} 

Wird Getter für Namen erzeugen (nicht Setter, da es endgültig ist) und Getter/Setter für das Alter. Es erzeugt auch equals, hashCode, toString und construtor Initialisierung erforderliche Felder (Name). Durch das Hinzufügen von @AllArgsConstructor würde der Konstruktor generiert, der beide Felder initialisiert.

Es gibt andere Anmerkungen und Parameter, die Ihnen Kontrolle über Zugriffsrechte geben (sollte Ihr Getter geschützt oder öffentlich sein), Namen (getName oder Name?), Usw. Und es gibt mehr. Zum Beispiel mag ich die Erweiterungsmethoden sehr.

Lombok ist sehr einfach zu bedienen. Laden Sie einfach das JAR herunter und verwenden Sie die Anmerkungen, dann können die Getter/Setter in Ihrem Code verwendet werden, ohne dass sie wirklich ausgeschrieben werden. Darüber hinaus unterstützen IDEs wie Netbeans dies, so dass Sie den Getter/Setter in Codevervollständigung, Navigation usw. sehen. Die Anmerkungen werden nur während des Kompilierens nicht während der Laufzeit verwendet, so dass Sie lombok nicht mit Ihrem Jar verteilen.

NotNull: vielleicht andere

Reference 3

+0

Vielen Dank für Ihre Antwort. Was denkst du über die Verwendung von Setter-Methoden? – Slimu

7

Für eigene, kleine Projekte muss man das nicht verwenden. Wenn Sie jedoch Bibliotheken für andere erstellen, kann dies Ihren API-Benutzern helfen, robuste Anwendungen zu schreiben. IMO

Wie ich in den Kommentar geschrieben: Siehe nullable annotation usage für eine gute Antwort auf diese spezielle Frage.

2

Die Nutzung von @Nullable Dies wird durch findbugs und IdeaJ IDE, unterstützt wird, ist ein Benutzer zu lassen, und der Compiler weiß, es ist in Ordnung, einen Nullwert zu ermöglichen, als dieser Parameter.

Ich glaube, es ist eine einfachere Möglichkeit, einen Benutzer, der Ihre API betrachtet, wissen zu lassen, dass das Übergeben von NULL kein NPE oder undefiniertes Verhalten erzeugt.

Für Setter, wenn dieses Feld an vielen Orten verwendet werden soll, wäre es nett zu sehen, es ist Setter und entdecken Null behandelt wird.

Das sagte ich denke, es sollte nur für APIs oder Bibliotheken verwendet werden, die Verwendung in Ihrem eigenen Code würde zu viel nutzlosen Code erstellen.