0
我已經用Java編寫的程序,當我去到終端遵守它Java的Mac的編譯錯誤
的javac HelloWorld.java
我得到的錯誤「注:HelloWorld的。 java使用未選中或不安全的操作。 注意:使用-Xlint重新編譯:未選中以獲取詳細信息。「
我不知道這是爲什麼。當我在IDE中運行並編譯時,我沒有遇到任何錯誤,它運行時沒有缺陷。
我已經用Java編寫的程序,當我去到終端遵守它Java的Mac的編譯錯誤
的javac HelloWorld.java
我得到的錯誤「注:HelloWorld的。 java使用未選中或不安全的操作。 注意:使用-Xlint重新編譯:未選中以獲取詳細信息。「
我不知道這是爲什麼。當我在IDE中運行並編譯時,我沒有遇到任何錯誤,它運行時沒有缺陷。
很少有解決方案...越晚越好。
編譯指示編譯器錯誤的方式。要使用-Xlint:unchecked
$ javac -Xlint:unchecked HelloWorld.java
使用批註與註解來抑制你的java編譯器警告。把它取決於你想要抑制生效的範圍。
以下代碼片段顯示了可以放置抑制警告的位置。
package com.my.package;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unchecked") // <--- CHOOSE ONE !! put here for class scope.
public class MainPanel {
List<Object> stringObjs = new ArrayList<Object>();
public static void main(String[] args) {
stringObjs.add("Hello");
print(stringObjs);
}
@SuppressWarnings("unchecked") // <--- OR !! put here for method scope
public static void print(List<?> strings) {
@SuppressWarnings("unchecked") // <--- OR here for local variable scope.
List<String> toprint = (List<String>) strings; // <--- causes the compiler warning.
for(String s : toprint) System.out.println(s);
}
}
你可以看到所有的泛型都明確地使用了正確的類型。編譯器對所有泛型中的類型都有清晰的概念。良好的開發者應該盡全力避免警告。
package com.my.package;
import java.util.ArrayList;
import java.util.List;
public class MainPanel {
public static void main(String[] args) {
List<String> stringObjs = new ArrayList<String>(); // <-- here
stringObjs.add("Hello");
print(stringObjs);
}
public static void print(List<String> strings) { // <-- here
List<String> toprint = (List<String>) strings; // <-- and here
for(String s : toprint) System.out.println(s);
}
}
這是一個警告還是錯誤? – Codebender
我認爲這可能是一個警告 – bhsingh
是的。這是因爲你的代碼可能有一些**轉換**,編譯器不能保證在運行時工作。如果您確定它可以在運行時運行,您可以在代碼中使用'@SuppressWarnings(「unchecked」)'來阻止此警告。但是,即使出現警告,您的代碼也能正常編譯並工作。 – Codebender