2015-08-28 56 views
0

我已經用Java編寫的程序,當我去到終端遵守它Java的Mac的編譯錯誤

的javac HelloWorld.java

我得到的錯誤「注:HelloWorld的。 java使用未選中或不安全的操作。 注意:使用-Xlint重新編譯:未選中以獲取詳細信息。「

我不知道這是爲什麼。當我在IDE中運行並編譯時,我沒有遇到任何錯誤,它運行時沒有缺陷。

+0

這是一個警告還是錯誤? – Codebender

+0

我認爲這可能是一個警告 – bhsingh

+1

是的。這是因爲你的代碼可能有一些**轉換**,編譯器不能保證在運行時工作。如果您確定它可以在運行時運行,您可以在代碼中使用'@SuppressWarnings(「unchecked」)'來阻止此警告。但是,即使出現警告,您的代碼也能正常編譯並工作。 – Codebender

回答

0

很少有解決方案...越晚越好。

  1. 編譯指示編譯器錯誤的方式。要使用-Xlint:unchecked

    $ javac -Xlint:unchecked HelloWorld.java

  2. 使用批註與註解來抑制你的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); 
        } 
    
    }