Benutzervorgaben für Java-Kompilierungsfehler/-warnungen

Geben Sie Ihre Benutzervorgaben für die Fehler-/Warnungseinstellungen auf der Benutzervorgabenseite Benutzervorgabenseite für Fehler/Warnungen öffnen Java > Compiler > Fehler/Warnungen an.

Codedarstellung

Option

Beschreibung

Standardwert

Nicht statischer Zugriff auf statisches Member

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn in einem Ausdrucksempfänger auf ein statisches Feld oder eine Methode zugegriffen wird. Ein Verweis auf ein statisches Member sollte durch einen Typnamen qualifiziert werden.

Warnung

Indirekter Zugriff auf statisches Member

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn indirekt auf ein statisches Feld oder eine Methode zugegriffen wird. Ein statisches Feld einer Schnittstelle ist mit einem deklarierenden Typnamen zu qualifizieren.

Ignorieren

Unqualifizierter Zugriff auf Instanzfeld

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn er einen nicht qualifizierten Zugriff auf ein Feld feststellt (z. B. wenn 'this' fehlt).

Ignorieren

Zugriff auf ein nicht zugriffsfähiges Member eines einschließenden Typs

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er den Zugriff auf ein nicht zugriffsfähiges Member eines einschließenden Typs emuliert. Solche Zugriffe können Auswirkungen auf die Leistung beinhalten.

Ignorieren

Parameterzuordnung

Das Zuordnen eines Werts zu einem Parameter wird allgemein als schlechter Programmierstil angesehen. Wenn diese Option aktiviert ist, signalisiert der Compiler ein solches Szenario entweder als Fehler oder als Warnung.

Ignorieren

Nicht ausgelagerte Zeichenfolgen

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für nicht ausgelagertes Zeichenfolgeliteral aus (d. h. nicht mit dem Tag //$NON-NLS-<n>$ versehen) oder für nicht ausgelagerte Zeichenfolgetags, die keiner Zeichenfolge angehören.

Ignorieren

Nicht dokumentierter leerer Block

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn die Anweisung eines leeren Blocks ohne erklärenden Kommentar gefunden wird.

Ignorieren

Die Ressource wird nicht mit try-with-resource verwaltet (1.7 oder höher)

Wenn diese Option aktiviert ist, dann gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine lokale Variable einen Wert vom Typ 'java.lang.AutoCloseable' enthält und wenn die Methode 'close()' explizit für diese Ressource aufgerufen wird, die Ressource jedoch nicht mit einem try-with-resource-Block verwaltet wird.

Ignorieren

Methode mit einem Konstruktornamen

Das Benennen einer Methode mit einem Konstruktornamen wird allgemein als schlechter Programmierstil betrachtet. Wenn diese Option aktiviert ist, signalisiert der Compiler ein solches Szenario entweder als Fehler oder als Warnung.

Warnung

Methode darf statisch sein

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für Methoden aus, die privat oder 'final' sind und nur auf statische Member verweisen.

Ignorieren

Methode darf potenziell statisch sein

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für Methoden aus, die nicht privat oder 'final' sind und nur auf statische Member verweisen. Beachten Sie, dass Methoden in einer Unterklasse überschrieben werden können. Wenn Sie also eine "potenziell statische" Methode als statisch definieren, kann dies vorhandene Clients außer Funktion setzen.

Ignorieren

Potenzielle Programmierungsprobleme

Identische Werte ('x == x') werden verglichen

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn ein Vergleich identische Operanden (zum Beispiel 'x == x') einbezieht.

Warnung

Zuordnung ist wirkungslos (z. B. 'x = x')

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine Zuordnung keine Auswirkung hat (z. B. "x = x").

Warnung

Mögliche zufällige boolesche Zuordnung (z. B. 'if (a = b)')

Wenn diese Option aktiviert ist, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er eine mögliche zufällige boolesche Zuordnung feststellt (z. B. 'if (a = b)').

Ignorieren

Konvertierungen ('boxing' und 'unboxing')

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn Konvertierungen ('boxing' und 'unboxing') gefunden werden. 'Autoboxing' kann die Leistung nachteilig beeinflussen.

Ignorieren

Verwendung eines Zeichenbereichs in Verkettung von Zeichenfolgen

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn in Verkettungen von Zeichenfolgen ein Ausdruck 'char[]' verwendet wird.

"hello" + new char[]{'w','o','r','l','d'}

Warnung

Ungenaue Typübereinstimmung für Vararg-Argumente

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine ungenaue Typübereinstimmung für Vararg-Argumente gefunden wird.

Warnung

Leere Anweisung

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine leere Anweisung gefunden wird (z. B. ein nicht erforderliches Semikolon).

Ignorieren

Nicht verwendete Objektzuordnung

Wenn diese Option aktiviert ist, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er ein zugeordnetes Objekt feststellt, das nicht verwendet wird. Beispiel:

if (name == null)
   new IllegalArgumentException();

Ignorieren

Unvollständige switch-case-Anweisungen für enum

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er eine Anweisung 'switch' vorfindet, die weder eine case-Standardanweisung noch case-Anweisungen für jede Aufzählungskonstante der referenzierte Aufzählung (enum) enthält.

Die Ausgabe dieser Warnung wird in der Java-Sprachspezifikation 14.11 empfohlen. Hierdurch soll sichergestellt werden, dass switch-Anweisungen alle möglichen Enum-Werte abdecken.

Warnung

Signal auch wenn case-Standardanweisung vorhanden ist

Ist diese Option aktiviert, gibt der Compiler zusätzlich einen Fehler oder eine Warnung aus, wenn eine Aufzählungskonstante (enum) durch eine case-Anweisung nicht abgedeckt ist, auch wenn eine case-Standardanweisung vorhanden ist.

Diese Option soll fehlende case-Anweisungen ermitteln, wenn eine neue Aufzählungskonstante hinzugefügt wird.

Inaktiviert

Für 'switch' fehlt die case-Standardanweisung

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine switch-Anweisung keine case-Standardanweisung aufweist. Folglich wird eine Markierung für eine fehlende case-Standardanweisung auch dann gesetzt, wenn alle möglichen Werte ansonsten durch case-Anweisungen abgedeckt sind.

Mit dieser Option soll sichergestellt werden, dass neue switch-Ausdruckswerte explizit verarbeitet und nicht übersprungen werden. Diese Option kann auch bei der Erklärung von Kompilierungsfehlern für nicht initialisierte Variablen nach einer switch-Anweisung helfen: Die Gruppe zulässiger Werte kann in der Zukunft zunehmen, sodass die Variablen auch in der case-Standardanweisung initialisiert werden müssen.

Ignorieren

case in switch-Anweisung ausgelassen

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine case-Anweisung durch Auslassung (Fallthrough) einer vorherigen, nicht leeren case-Anweisung eingegeben werden könnte.

Ignorieren

Verdeckter Catch-Block

Bei einer lokalen try-Anweisung können einige Catch-Blöcke möglicherweise andere verdecken, z. B.:

try { throw new java.io.CharConversionException();
} catch (java.io.CharConversionException e) {
} catch (java.io.IOException e) {}

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für verdeckte Catch-Blöcke entsprechend den überprüften Ausnahmebedingungen aus.

Warnung

Der 'finally'-Block wird nicht normal beendet.

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine 'finally'-Anweisung nicht normal beendet wird (z. B. eine return-Anweisung enthält).

Warnung

Inaktiver Code (z. B. 'if (false)')

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er inaktiven Code (z. B. 'if (false)') feststellt.

Warnung

Ressourcenleck

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine lokale Variable einen Wert des Typs 'java.lang.AutoCloseable' (Kompatibilität >= 1.7) oder einen Wert des Typs 'java.io.Closeable' (Kompatibilität <= 1.6) enthält und wenn die Ablaufanalyse zeigt, dass die Methode 'close()' für diesen Wert nicht lokal aufgerufen wird.

Warnung

Mögliches Ressourcenleck

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine lokale Variable einen Wert des Typs 'java.lang.AutoCloseable' (Kompatibilität >= 1.7) oder einen Wert des Typs 'java.io.Closeable' (Kompatibilität <= 1.6) enthält und wenn die Ablaufanalyse zeigt, dass die Methode 'close()' für diesen Wert nicht für alle Ausführungspfade lokal aufgerufen wird.

Ignorieren

Serialisierbare Klasse ohne serialVersionUID

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn ein 'java.io.Serializable' implementierender Typ kein 'serialVersionUID'-Feld enthält.

Warnung

Fehlender synchronisierter Änderungswert in übernommener Methode

Wenn diese Option aktiviert ist, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er eine übernommene Methode feststellt, in der der synchronisierte Änderungswert fehlt.

Ignorieren

Klasse überschreibt 'equals()', aber nicht 'hashCode()'

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn er eine Klasse feststellt, die 'equals()', aber nicht 'hashCode()' überschreibt.

Ignorieren

Namensspiegelung und Konflikte

Eine Felddeklaration verdeckt ein anderes Feld oder eine Variable.

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine Felddeklaration ein anderes übernommenes Feld verdeckt.

Ignorieren

Eine lokale Variablendeklaration verdeckt ein anderes Feld oder eine andere Variable.

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine lokale Variablendeklaration ein anderes Feld oder eine Variable verdeckt.

Ignorieren

Parameter für Konstruktor oder Setter-Methode einschließen

Ist diese Option aktiviert, gibt der Compiler zusätzlich einen Fehler oder eine Warnung aus, wenn ein Konstruktor oder eine Setter-Methode ein anderes Feld oder eine Variable verdecken.

Inaktiviert

Ein Typparameter verdeckt einen anderen Typ.

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn z. B. ein Typparameter einer untergeordneten Klasse einen äußeren Typ verdeckt.

Warnung

Methode überschreibt keine sichtbare Methode des Pakets

Eine Standardmethode eines Pakets ist in einem anderen Paket nicht sichtbar und kann deshalb nicht überschrieben werden. Wenn diese Option aktiviert ist, signalisiert der Compiler ein solches Szenario entweder als Fehler oder als Warnung.

Warnung

Konflikte zwischen Schnittstellenmethode und geschützter Methode 'Object'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine Schnittstelle eine Methode definiert, die mit der Methode eines nicht übernommenen Objekts nicht kompatibel ist. Solange dieser Konflikt nicht aufgelöst ist, kann eine solche Schnittstelle nicht implementiert werden, z. B.

interface I {
   int clone();
}

Warnung

Veraltete und eingeschränkte API

Veraltete API

Ist diese Option aktiviert, signalisiert der Compiler die Verwendung von herabgestufter API entweder als Fehler oder als Warnung.

Warnung

Verwendung von herabgestufter API in veraltetem Code melden

Ist diese Option aktiviert, signalisiert der Compiler die Verwendung einer herabgestuften API innerhalb von veraltetem Code. Die Wertigkeit des Fehlers wird mit der Option 'Herabgestufte API' gesteuert.

Inaktiviert

Überschreibende oder implementierende veraltete Methode melden

Ist diese Option aktiviert, meldet der Compiler das Überschreiben oder Implementieren einer veralteten Methode. Die Wertigkeit des Fehlers wird mit der Option 'Herabgestufte API' gesteuert.

Inaktiviert

Nicht zulässiger Verweis (Zugriffsregeln)

Ist diese Option aktiviert, meldet der Compiler einen nicht zulässigen Verweis, der in den Zugriffsregeln angegeben ist.

Fehler

Nicht empfohlener Verweis (Zugriffsregeln)

Ist diese Option aktiviert, meldet der Compiler einen nicht empfohlenen Verweis, der in den Zugriffsregeln angegeben ist.

Warnung

Nicht erforderlicher Code

Wert der lokalen Variable wird nicht verwendet

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine lokale Variable deklariert ist, ihr Wert jedoch nie innerhalb ihres Geltungsbereichs verwendet wird.

Warnung

Wert des Parameters wird nicht verwendet

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn ein Parameter deklariert ist, sein Wert jedoch nie innerhalb seines Geltungsbereichs verwendet wird.

Ignorieren

In überschreibenden und implementierenden Methoden ignorieren

Ist diese Option aktiviert, gibt der Compiler keinen Fehler oder keine Warnung aus, wenn ein Parameter deklariert ist, jedoch in überschreibenden oder implementierenden Methoden nie innerhalb seines Geltungsbereichs verwendet wird.

Aktiviert

Parameter ignorieren, die mit dem Tag '@param' dokumentiert sind

Wenn diese Option aktiviert ist, gibt der Compiler keinen Fehler und keine Warnung aus, wenn ein ungelesener Parameter mit einem Tag '@param' dokumentiert wird.

Aktiviert

Nicht verwendete Typparameter

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für nicht verwendete Typparameter aus.

Ignorieren

Nicht verwendeter Import

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für nicht verwendete Importverweise aus.

Warnung

Nicht verwendetes privates Member

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn ein privates Member deklariert ist, in derselben Einheit jedoch nie verwendet wird.

Warnung

Nicht erforderliche Anweisung 'else'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine nicht erforderliche 'else'-Anweisung gefunden wird (z. B. if (Bedingung) return; else doSomething();).

Ignorieren

Nicht erforderliche Umsetzung von Operation 'instanceof'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine nicht erforderliche Umsetzungs- oder 'instanceof'-Operation festgestellt wird (z. B. if (object instanceof Object) return;).

Ignorieren

Nicht erforderliche Deklaration von ausgelöster Ausnahmebedingung

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine nicht erforderliche Deklaration einer ausgelösten Ausnahmebedingung gefunden wird.

Ignorieren

In überschreibenden und implementierenden Methoden ignorieren

Ist diese Option aktiviert, gibt der Compiler keinen Fehler oder keine Warnung aus, wenn eine nicht erforderliche Deklaration einer Ausnahmebedingung in einer Methode gefunden wird, die einer andere Methode überschreibt oder implementiert.

Aktiviert

Ausnahmen ignorieren, die mit den Tags '@throws' oder '@exception' dokumentiert sind.

Ist diese Option aktiviert, gibt der Compiler keinen Fehler oder keine Warnung aus, wenn eine nicht erforderliche Deklaration einer ausgelösten Ausnahmebedingung mit einem Tag '@throws' oder '@exception' dokumentiert wird.

Aktiviert

'Exception' und 'Throwable' ignorieren

Ist diese Option aktiviert, gibt der Compiler keinen Fehler oder keine Warnung aus, wenn eine nicht erforderliche Deklaration einer Ausnahmebedingung oder eines Throwables gefunden wird.

Aktiviert

Nicht verwendete Bezeichnung 'break' oder 'continue'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine nicht verwendete Bezeichnung 'break' (Unterbrechung) oder 'continue' (Fortsetzung) festgestellt wird.

Warnung

Redundante Superschnittstelle

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er einen Typ feststellt, der explizit eine Schnittstelle implementiert, die bereits durch einen seiner Supertypen implementiert worden ist.

Ignorieren

Generische Typen

Nicht überprüfte generische Typoperation

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine nicht überprüfte generische Typoperation gefunden wird.

Warnung

Verwendung eines unformatierten Typs

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn er eine Verwendung eines unformatierten Typs (z. B. 'List' anstatt 'List<String>') feststellt.

Warnung

Generischer, mit finaler Typenbindung deklarierter Typparameter

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn ein generischer, mit finaler Typenbindung deklarierter Typparameter gefunden wird.

Warnung

Unvermeidbare generische Typprobleme durch unformatierte APIs ignorieren

Ist diese Option aktiviert, ignoriert der Compiler mit Generics zusammenhängende Typprobleme, die vom Programmierer nicht hätten vermieden werden können, weil eine referenzierte API bereits unformatierte Typen enthält. Zum Beispiel könnte ein Typ zwangsweise unformatierte Typen in seinen Methodensignaturen und Rückgabetypen verwenden müssen, weil die Methoden, die er von einem Supertyp überschreibt, mit unformatierten Typen an erster Stelle deklariert sind.

Wenn die alte API schließlich generifiziert wird, verschwinden die meisten dieser Probleme oder es wird ein Compilerfehler angezeigt, weil die verwendeten Typargumente nicht richtig sind. Bei unformatierten Verweisen in Methodensignaturen tritt das Problem bezüglich unformatierter Typen erneut auf.

Inaktiviert

Anmerkungen

Anmerkung des Typs '@Override' fehlt

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn er eine Methode feststellt, die eine andere implementierte Methode überschreibt, und die Anmerkung des Typs '@Override' fehlt.

Ignorieren

Implementierungen von Schnittstellenmethoden einschließen (1.6 oder höher)

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung auch dann aus, wenn er eine Methode feststellt, die eine andere in einer Schnittstelle deklarierte Methode überschreibt oder implementiert, und die Anmerkung des Typs '@Override' fehlt.
Bitte beachten Sie, dass '@Override' nur dann in solchen Methoden zulässig ist, wenn es sich um einen Compiler mit der Compiler-Konformitätsstufe 1.6 oder höher handelt. Dies bedeutet, dass dieser Fehler bzw. diese Warnung bei Code der Stufe 1.5 in keinem Fall angezeigt wird.

Aktiviert

Anmerkung des Typs '@Deprecated' fehlt

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er einen veralteten Typ ohne die zusätzliche Anmerkung des Typs '@Deprecated' feststellt.

Ignorieren

Anmerkung wird als Superschnittstelle verwendet

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn er einen Typ feststellt, der eine Anmerkung implementiert. Obwohl möglich, wird dies als schlechte Praktik betrachtet.

Warnung

Nicht verarbeitetes Token in '@SuppressWarnings'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn ein unbekanntes Token in einer Anmerkung des Typs '@SuppressWarnings' festgestellt wird.

Warnung

Anmerkungen des Typs '@SuppressWarnings' aktivieren

Ist diese Option aktiviert, verarbeitet der Compiler Anmerkungen des Typs '@SuppressWarnings'. Wenn diese Option inaktiviert ist, reagiert das System so, als ob alle Anmerkungen vom Typ '@SuppressWarnings' entfernt worden wären.

Aktiviert

Nicht verwendetes Token '@SuppressWarnings'

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn ein nicht verwendetes Token in einer Anmerkung des Typs '@SuppressWarnings' gefunden wird.

Warnung

Optionale Fehler mit '@SuppressWarnings' unterdrücken

Ist diese Option aktiviert, unterdrückt die Anmerkung '@SuppressWarnings' auch die optionalen Kompilierungsfehler, z. B. Optionen, die hier auf 'Error' gesetzt wurden. Obligatorische Kompilierungsfehler können nicht unterdrückt werden.

Inaktiviert

Nullanalyse

Nullzeigerzugriff

Wenn diese Option aktiviert ist, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn festgestellt wird, dass eine lokale Variable, die mit Bestimmtheit den Wert Null hat, dereferenziert wird. Beachten Sie, dass die Analyse nicht alle Nullzeigerzugriffe findet (siehe Möglicher Nullzeigerzugriff).

Warnung

Möglicher Nullzeigerzugriff

Ist diese Option aktiviert, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn festgestellt wird, dass eine lokale Variable, die den Wert Null haben kann dereferenziert wird. Dabei ist zu beachten, dass die Analyse eher konservativ ist, d. h. sie berücksichtigt nur Fälle, die einen begründeten Verdacht zulassen.

Die Qualität der Analyse kann verbessert werden, indem Nullanmerkungen verwendet werden, die mithilfe der Option Anmerkungsbasierte Nullanalyse aktivieren aktiviert werden können.

Ignorieren

Prüfung auf redundante Null

Wenn diese Option aktiviert ist, gibt der Compiler immer dann einen Fehler oder eine Warnung aus, wenn eine lokale Variable, die nicht Null sein kann, auf einen Nullwert geprüft wird.

Ignorieren

'assert' in Nullanalyse einschließen

Ist diese Option aktiviert, berücksichtigt der Compiler die Anweisung 'assert' bei der Ausführung einer Nullanalyse.

Inaktiviert

Anmerkungsbasierte Nullanalyse aktivieren

Ist diese Option aktiviert, interpretiert der Compiler die Anmerkungen vom Typ '@Nullable', '@NonNull' und '@NonNullByDefault' so, dass diese angeben, ob ein bestimmter Typ den Wert 'null' enthält oder nicht.

Die Auswirkungen dieser Analysen werden weitergehend durch die folgenden Unteroptionen gesteuert.

Siehe auch Nullanmerkungen verwenden.

Inaktiviert

Verstoß gegen Nullspezifikation

In Abhängigkeit von dieser Option gibt der Compiler entweder einen Fehler oder eine Warnung aus, wenn eine der folgenden Situationen festgestellt wird:

  1. Eine Methode, die mit einer Anmerkung vom Typ 'nonnull' (ungleich Null) deklariert wird, gibt einen nullfähigen Ausdruck zurück.
  2. Ein nullfähiger Ausdruck wird als Argument in einem Methodenaufruf übergeben, bei dem der entsprechende Parameter der aufgerufenen Methode mit einer Anmerkung 'nonnull' deklariert ist.
  3. Ein nullfähiger Ausdruck wird einer lokalen Variablen zugeordnet, die mit einer Anmerkung 'nonnull' deklariert wurde.
  4. Eine Methode, die eine übernommene Methode überschreibt, die mit einer Anmerkung 'nonnull' deklariert ist, versucht, diesen Vertrag weniger restriktiv zu gestalten, indem eine nullfähige Anmerkung angegeben wird (Verbot einer kontravarianten Rückgabe).
  5. Eine Methode, die eine übernommene Methode überschreibt, die eine nullfähige Deklaration für mindestens einen Parameter umfasst, versucht diesen Nullvertrag restriktiver zu gestalten, indem eine Anmerkung 'nonnull' für den zugehörigen Parameter angegeben wird (Verbot kovarianter Parameter).

Im vorstehenden Fall wird ein Ausdruck als nullfähig betrachtet, wenn entweder statisch nachgewiesen ist, dass er mit dem Wert null ausgewertet wird, oder wenn er mit einer nullfähigen Anmerkung deklariert ist.

Fehler

Konflikt zwischen Nullanmerkungen und Nullinferenz

In Abhängigkeit von dieser Option gibt der Compiler entweder einen Fehler oder eine Warnung aus, wenn eine der folgenden Situationen festgestellt wird:

  1. Eine Methode, die mit einer Anmerkung 'nonnull' deklariert ist, gibt einen Ausdruck zurück, für den statisch nachgewiesen ist, dass er in bestimmten Abläufen mit einem Nullwert ausgewertet wird.
  2. Ein Ausdruck, für den statisch nachgewiesen ist, dass er in bestimmten Abläufen mit einem Nullwert ausgewertet wird, wird als Argument in einem Methodenaufruf übergeben, in dem der entsprechende Parameter der aufgerufenen Methode mit einer Anmerkung 'nonnull' deklariert ist.
  3. Ein Ausdruck, für den statisch nachgewiesen ist, dass er in bestimmten Abläufen als Nullwert ausgewertet wird, wird einer lokalen Variablen zugeordnet, die mit einer Anmerkung 'nonnull' deklariert ist.

Fehler

Ungeprüfte Konvertierung von einem Typ ohne Anmerkung in den Typ '@NonNull'

In Abhängigkeit von dieser Option gibt der Compiler entweder einen Fehler oder eine Warnung aus, wenn eine der folgenden Situationen festgestellt wird:

  1. Eine Methode, die mit einer Anmerkung 'nonnull' deklariert wurde, gibt einen Ausdruck zurück, für den nicht genügend Nullness-Informationen vorliegen, um statisch nachzuweisen, dass kein Ablauf zur Laufzeit einen Nullwert übergeben wird.
  2. Ein Ausdruck, für den nicht genügend Nullness-Informationen verfügbar sind, um statisch nachzuweisen, dass niemals während der Laufzeit eine Auswertung zu einem Nullwert auftritt, wird als Argument in einem Methodenaufruf übergeben, in dem der entsprechende Parameter der aufgerufenen Methode mit einer Anmerkung 'nonnull' deklariert ist.
  3. Ein Ausdruck, für den nicht genügend Nullness-Informationen verfügbar sind, um statisch nachzuweisen, dass niemals während der Laufzeit eine Auswertung zu einem Nullwert auftritt, wird einer lokalen Variablen zugeordnet, die mit einer Anmerkung 'nonnull' deklariert wurde.

Eine ungeprüfte Konvertierung ist normalerweise die Folge der Verwendung anderer Variablen oder Methoden ohne Anmerkung.

Warnung

Redundante Nullanmerkung

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung aus, wenn eine Nicht-Nullanmerkung angewendet wird, obwohl derselbe Effekt bereits von einem Standardwert erreicht wird, der an der aktuellen Position anwendbar ist. Ein solcher Standardwert kann mithilfe der Anmerkung '@NonNullByDefault' festgelegt werden.

Warnung

Parameter '@NonNull' in überschreibender Methode nicht mit Anmerkungen versehen

Ist diese Option aktiviert, gibt der Compiler einen Fehler oder eine Warnung für einen Parameter einer Methode aus, die eine übernommene Methode überschreibt, wenn alle folgenden Bedingungen erfüllt sind:

  • Die überschriebene Methode deklariert den entsprechenden Parameter als ungleich null.
  • Der Parameter in der überschreibenden Methode hat keine Nullanmerkung.
  • Die überschreibende Methode ist nicht von einem Nullness-Standardwert betroffen.
  • Die Übernahme von Nullanmerkungen ist inaktiviert.

Warnung

Fehlende Anmerkung '@NonNullByDefault' im Paket

Ist diese Option aktiviert, gibt der Compiler in folgenden Fällen einen Fehler oder eine Warnung aus:

  1. Wenn ein Paket infolge eines fehlenden Elements 'package-info.java' oder einer fehlenden Nullness-Standardanmerkung in 'package-info.java' keine Nullness-Standardanmerkung enthält.
  2. Wenn ein Typ in einem Standardpaket keine Nullness-Standardanmerkung enthält.

Ignorieren

Standardanmerkungen für Nullspezifikationen verwenden

Ist diese Option aktiviert, verwendet der Compiler die Standardgruppe von Anmerkungen für Nullspezifikationen. Diese Anmerkungen werden im Eclipse-SDK in das Produktpaket org.eclipse.jdt.annotation eingeschlossen.

Sie können unterschiedliche Anmerkungsnamen angeben, die in Ihren Projekten verwendet werden sollen, müssen dabei jedoch beachten, dass der Eclipse-Compiler nur die Semantik unterstützt, die in den Standardanmerkungen angegeben ist:

  • org.eclipse.jdt.annotation.Nullable: Ein vollständig qualifizierter Name eines Java-Anmerkungstyps, der bei Anwendung auf einen Typ in einer Methodensignatur, Variablendeklaration oder Felddeklaration als Spezifikation interpretiert wird, bei der null an dieser Position ein gültiger Wert ist.
    Gegenwärtig werden die folgenden Positionen unterstützt: Methodenparameter, Methodenrückgabetypen, lokale Variablen und Felder.
  • org.eclipse.jdt.annotation.NonNull: Ein vollständig qualifizierter Name eines Java-Anmerkungstyps, der bei Anwendung auf einen Typ in einer Methodensignatur, Variablendeklaration oder Felddeklaration als Spezifikation interpretiert wird, bei der null an dieser Position kein gültiger Wert ist.
    Gegenwärtig werden die folgenden Positionen unterstützt: Methodenparameter, Methodenrückgabetypen, lokale Variablen und Felder.
  • org.eclipse.jdt.annotation.NonNullByDefault: Ein vollständig qualifizierter Name eines Java-Anmerkungstyps. Bei Anwendung auf ein Element ohne ein Anmerkungsargument werden alle Typen ohne Anmerkung in Methodensignaturen innerhalb des mit einer Anmerkung versehenen Elements so behandelt, als ob sie mit der Nicht-Nullanmerkung versehen worden wären.
    Wenn die Anmerkung hingegen mit der Konstanten 'false' als Argument angewendet wird, werden alle entsprechenden Standardwerte in den äußeren Bereichen für das Element mit Anmerkung storniert.

Aktiviert

Nullanmerkungen übernehmen

Bei Aktivierung sucht der Compiler nach allen Methoden ohne explizite Nullanmerkungen: Wenn er eine Methode, die Nullanmerkungen aufweist, überschreibt, behandelt er die aktuelle Methode so, als hätte sie dieselben Anmerkungen wie die überschriebene Methode.

Bei der Übernahme von Anmerkungen wird die effektive Nullness der überschriebenen Methode verwendet, nachdem an der Position der überschriebenen Methode die Übernahme transitiv angewandt wurde und nachdem jede standardmäßige Nullness angewandt wurde.

Wenn unterschiedliche implizite Nullanmerkungen (von einer standardmäßigen und/oder überschriebenen Methode mit 'nonnull') für denselben Typ in einer Methodensignatur gelten, wird dies als Fehler markiert, und es muss eine explizite Nullanmerkung verwendet werden, um eine Mehrdeutigkeit zu beheben.

Inaktiviert

Syntaktische Nullanalyse für Felder aktivieren

Bei Aktivierung dieser Option erkennt der Compiler bestimmte syntaktische Konstellationen, bei denen normalerweise eine nullbezogene Warnung für einen Feldverweis ausgelöst würde, die jedoch bei geringem Risiko unterdrückt werden kann, unter der Voraussetzung, dass derselbe Feldverweis unmittelbar zuvor als ungleich null (nonnull) bekannt war. Wenn Sie diese Option verwenden, lesen Sie bitte folgende Hinweise.

Inaktiviert

Wenn die Option Obige Fehler als schwerwiegende Kompilierungsfehler behandeln aktiviert ist, führen alle generierten Fehler (schwerwiegende und konfigurierbare) dazu, dass der Code nicht ausgeführt werden kann. Wenn diese Option inaktiviert ist, kann der Code ausgeführt werden, sofern er keinen schwerwiegenden Fehler aufweist (z. B. Syntaxfehler, Typfehler oder Fehler gemäß der Java-Sprachspezifikation).

Zugehörige Konzepte

Ansicht 'Fehler'
Schnellkorrektur
Java-Builder