2017-09-06 91 views
0

我有一個(視窗10)崇高的文本3文件NumberFormat.java下面簡單的代碼,格式化雙重美國貨幣:崇高文本無法識別的NumberFormat

import java.util.Scanner; 
import java.text.NumberFormat; 
import java.util.Locale; 

public class NumberFormat { 

    public static void main(String[] args) { 
     double num = 1000.322; 
     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(); 
     System.out.println("US: " + defaultFormat.format(num)); 
     return; 
    } 
} 

當我建立,但是,後續的錯誤專門爲NumberFormat顯示。

NumberFormat.java:2: error: NumberFormat is already defined in this compilation unit 
import java.text.NumberFormat; 
^ 
NumberFormat.java:10: error: cannot find symbol 
     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(); 
               ^
    symbol: method getCurrencyInstance() 
    location: class NumberFormat 
NumberFormat.java:11: error: cannot find symbol 
     System.out.println("US: " + defaultFormat.format(num)); 
               ^
    symbol: method format(double) 
    location: variable defaultFormat of type NumberFormat 
3 errors 

據我所見,代碼沒有錯誤。此外,該代碼片段輸出US: $1000.32,因爲它應該在所有其他IDE和文本編輯器上。有人可以解釋這些錯誤是什麼意思?爲什麼他們只會在崇高的文本中出現?

回答

3

我想你應該修改你的類名一類是從導入的類名稱不同,或者您也可以源改變你 java.text.NumberFormat defaultFormat = java.text.NumberFormat.getCurrencyInstance();

5

的問題是,您已經導入了一個名爲NumberFormat類成類同名。這導致了對NumberFormat實際引用的類別的混淆。 (這個混淆實際上在你的腦海裏,Java語言規範很清楚,它說NumberFormat將專指你的類,導入沒有效果,任何兼容的Java編譯器都會做出同樣的解釋。)

解決辦法有兩個:

  1. 不導入類。請改用其完全限定的名稱來引用它。

  2. 更改班級的名稱,使其不會與正在導入的班級發生衝突。

在我看來,第二種解決方案更好。特別是因爲NumberFormat對你的班級來說不是一個好名字。


,爲什麼他們只與崇高的文本發生?

他們沒有。您編寫的代碼不能用任何一致的Java編譯器進行編譯。

+0

我的錯誤,謝謝你的詳細解答,你得到相同的結果。 –

0

進口java.text.NumberFormat中

衝突在同一個文件中定義的類型。改變你的班名將解決問題。

1

這不是Sublime的問題。崇高只需從您的路徑調用javac命令。如果您編譯使用javac崇高

改變類名之外或是一個明確的包名的一部分,解決了這個問題