Sublime Text无法识别NumberFormat

KM1*_*646 0 java number-formatting sublimetext3

我在(Windows 10)sublime text 3文件中有以下简单代码NumberFormat.java,用于格式化双倍美国货币:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我构建时,跟随错误仅出现在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
Run Code Online (Sandbox Code Playgroud)

据我所知,代码没有错误.此外,此代码段US: $1000.32在所有其他IDE和文本编辑器上输出.有人可以解释这些错误的含义吗?为什么他们只出现崇高的文字?

Ste*_*n C 5

问题是您已将一个被调用NumberFormat的类导入到具有相同名称的类中.这导致了对NumberFormat实际引用的类的混淆.

(实际上你的想法很混乱.Java语言规范很明确.它说NumberFormat它将专门指向你的类.导入没有效果.任何兼容的Java编译器都会做出相同的解释.)

有两种解决方案:

  1. 不要导入该类.而是使用其完全限定名称来引用它.

  2. 更改类的名称,使其不与要导入的类发生冲突.

在我看来,第二种解决方案更好.特别是因为NumberFormat对你的班级来说不是一个好名字.


为什么他们只出现崇高的文字?

他们没有.您编写的代码不会使用任何符合标准的Java编译器进行编译.