2017-09-06 82 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崇高

改变类名之外或是一个明确的包名的一部分,解决了这个问题