355 Stimmen

Was führt dazu, dass javac die Warnung "uses unchecked or unsafe operations" ausgibt

Zum Beispiel:

javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

450voto

Bill the Lizard Punkte 384619

Dies tritt in Java 5 und später auf, wenn Sie Sammlungen ohne Typspezifizierer verwenden (z. B., Arraylist() anstelle von ArrayList<String>() ). Das bedeutet, dass der Compiler nicht überprüfen kann, ob Sie die Sammlung auf eine typsichere Weise verwenden, indem er Generika .

Um die Warnung loszuwerden, müssen Sie nur genau angeben, welche Art von Objekten Sie in der Sammlung speichern wollen. Also, anstatt von

List myList = new ArrayList();

verwenden.

List<String> myList = new ArrayList<String>();

In Java 7 können Sie die generische Instanziierung verkürzen, indem Sie Typ-Inferenz .

List<String> myList = new ArrayList<>();

233voto

Dan Dyer Punkte 52915

Wenn Sie den Vorschlag befolgen und mit der Option "-Xlint:unchecked" neu kompilieren, erhalten Sie genauere Informationen.

Neben der Verwendung von Rohtypen (wie in den anderen Antworten beschrieben) kann auch ein ungeprüfter Cast die Warnung verursachen.

Sobald Sie mit -Xlint kompiliert haben, sollten Sie in der Lage sein, Ihren Code zu überarbeiten, um die Warnung zu vermeiden. Dies ist nicht immer möglich, insbesondere wenn Sie älteren Code integrieren, der nicht geändert werden kann. In diesem Fall können Sie die Warnung an Stellen unterdrücken, von denen Sie wissen, dass der Code korrekt ist:

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}

35voto

Borzh Punkte 4778

Für Android Studio müssen Sie hinzufügen:

allprojects {

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked"
        }
    }

    // ...
}

in der build.gradle-Datei Ihres Projekts, um zu erfahren, wo dieser Fehler auftritt.

18voto

Diese Warnung bedeutet, dass Ihr Code auf einem rohen Typ arbeitet, kompilieren Sie das Beispiel mit der

-Xlint:unchecked 

um die Details zu erfahren

wie diese:

javac YourFile.java -Xlint:unchecked

Main.java:7: warning: [unchecked] unchecked cast
        clone.mylist = (ArrayList<String>)this.mylist.clone();
                                                           ^
  required: ArrayList<String>
  found:    Object
1 warning

docs.oracle.com spricht hier darüber: http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html

8voto

Oskar Punkte 2446

Ich hatte 2 Jahre alte Klassen und einige neue Klassen. Ich habe es in Android Studio wie folgt gelöst:

allprojects {

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked"
        }
    }

}

In der Datei build.gradle meines Projekts ( Borzh Lösung )

Und wenn dann noch etwas Metheds übrig ist:

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}

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