2016-12-20 1 views
2

Ich schrieb ein einfaches Projekt, um zu lernen, wie man mit Annotation Validierung arbeiten. Zu diesem puspose Ich habe Maven Abhängigkeit (auch versuchte ich javax.validation, die nicht für mich funktioniert):JetBrains '@NotNull funktioniert nur, wenn das Projekt von IDEA

<dependency> 
    <groupId>org.jetbrains</groupId> 
    <artifactId>annotations</artifactId> 
    <version>15.0</version> 
</dependency> 

und verwendet es so aus:

public boolean add(@NotNull T entry){ ... 

Als ich das Projekt erstellen aus IDEA, alles ist in Ordnung, aber es funktioniert nicht beim Kompilieren des Codes mit Maven-Befehl. In der dekompilierten Klassendatei habe ich festgestellt, dass IDEA meine Klassen auf andere Weise kompiliert. Es fügt diese Prüfung hinzu:

if (entry == null) { 
    $$$reportNull$$$0(0); 
} 

Und maven nicht.

Ich mache ich etwas falsch? Bitte sagen Sie mir, wie es verwendet werden sollte (egal, ob Jetbrains oder Javax-Validierung).

+0

möglich ist. Mögliche Duplikate von [Warum @Nonnull-Annotation zur Laufzeit überprüft?] (Http://StackOverflow.com/Questions/40847472/Why-Nonnull-annotation-checked- zur Laufzeit) –

+0

Das ist IntelliJ IDEA 2016.3 Feature (nicht sehr schön). –

Antwort

0

Teilweise Raten hier: Sie sehen, es ist nicht "IDEA", die diese zusätzliche Prüfung in den Byte-Code setzt.

Die Sache ist: Anmerkungen können auch verwendet werden, um Code generieren (siehe here für weitere Informationen). Und wie Sie von diesem Link sehen können; Das Kernstück für Code-Generation ist: Diese Annotation erfordert eine javax.annotation.processing.Processor-Klasse. Und das wird von dem Compiler verwendet, um die Quellcodeanmerkung innerhalb des Bytecodes in etwas Vernünftiges umzuwandeln.

Wenn ich dich richtig verstehe, hast du es nicht geschafft, diese javax Teile für deine Maven Kompilierung zu installieren. Also wahrscheinlich fehlt der eine Teil dort; Die Lösung besteht also darin, Ihr Maven-Setup zu reparieren, um alle erforderlichen Abhängigkeiten bereitzustellen.

0

Ihre @NotNull Annotation scheint Teil des IntelliLang-Plugins zu sein, das entwickelt wurde, um die Codierung in IDEA zu unterstützen (d. H. Hilft bei der Vertragscodierung). Ich bezweifle, dass es außerhalb von IDEA verfügbar ist.

Bevor Sie mit der Arbeit mit Sprachinjektionen beginnen, stellen Sie sicher, dass das IntelliLang-Plugin aktiviert ist. Das Plugin ist mit IntelliJ IDEA gebündelt und wird standardmäßig

Ich weiß nicht viel über sie aktiviert, so sagen Sie hallo zu reference

javax.validation auf der anderen Seite wurde entwickelt, um ganz andere Dinge. Er prüft, ob der Datenobjektinhalt über Bean Validation von java EE

Verwandte Themen