예를 들면 다음과 같습니다.
javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
답변
유형 지정자없이 컬렉션을 사용하는 경우 (예 : Arraylist()
대신 ArrayList<String>()
) Java 5 이상에서 발생합니다 . 컴파일러가 generics를 사용하여 형식이 안전한 방식으로 컬렉션을 사용하고 있는지 확인할 수 없음을 의미합니다 .
경고를 없애려면 컬렉션에 어떤 유형의 객체를 저장하고 있는지 구체적으로 지정하십시오. 그래서 대신
List myList = new ArrayList();
사용하다
List<String> myList = new ArrayList<String>();
Java 7에서는 Type Inference 를 사용하여 일반 인스턴스화를 줄일 수 있습니다 .
List<String> myList = new ArrayList<>();
답변
“-Xlint : unchecked”스위치를 사용하여 제안한 작업을 수행하고 다시 컴파일하면보다 자세한 정보가 제공됩니다.
다른 답변에 설명 된대로 원시 유형을 사용하는 것 외에도 확인되지 않은 캐스트는 경고를 유발할 수 있습니다.
-Xlint로 컴파일하면 경고를 피하기 위해 코드를 다시 작성할 수 있습니다. 특히 변경할 수없는 레거시 코드와 통합하는 경우에는 항상 가능하지는 않습니다. 이 상황에서는 코드가 올바른지 알 수있는 위치에서 경고를 표시하지 않을 수 있습니다.
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
답변
Android Studio의 경우 다음을 추가해야합니다.
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked"
}
}
// ...
}
프로젝트의 build.gradle 파일에서이 오류가 발생한 위치를 확인하십시오.
답변
이 경고는 코드가 원시 유형으로 작동한다는 것을 의미합니다.
-Xlint:unchecked
세부 사항을 얻기 위해
이처럼 :
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은 여기에 대해 이야기합니다 :
http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
답변
나는 2 살짜리 수업과 새로운 수업이있었습니다. Android Studio에서 다음과 같이 해결했습니다.
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked"
}
}
}
내 프로젝트 build.gradle 파일에서 ( Borzh 솔루션 )
그리고 일부 미신이 남는 경우 :
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
답변
예를 들어 제네릭 컬렉션을 반환하는 함수를 호출하고 제네릭 매개 변수를 직접 지정하지 않은 경우.
기능을 위해
List<String> getNames()
List names = obj.getNames();
이 오류가 발생합니다.
그것을 해결하려면 매개 변수를 추가하면됩니다.
List<String> names = obj.getNames();
답변
내가 올바르게 기억한다면, Java가 Generics를 추가했을 때 “확인되지 않거나 안전하지 않은 작업”경고가 추가되었습니다 . 일반적으로 유형에 대해 좀 더 명시 적으로 요구합니다.
예를 들어. ArrayList foo = new ArrayList();
javac가 찾고 있기 때문에 코드 가 경고를 트리거합니다.ArrayList<String> foo = new ArrayList<String>();