作者:-吴奇润 | 来源:互联网 | 2023-01-19 18:48
我在(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;
}
}
但是,当我构建时,跟随错误仅出现在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和文本编辑器上输出.有人可以解释这些错误的含义吗?为什么他们只出现崇高的文字?
1> Stephen C..:
问题是您已将一个被调用NumberFormat
的类导入到具有相同名称的类中.这导致了对NumberFormat
实际引用的类的混淆.
(实际上你的想法很混乱.Java语言规范很明确.它说NumberFormat
它将专门指向你的类.导入没有效果.任何兼容的Java编译器都会做出相同的解释.)
有两种解决方案:
不要导入该类.而是使用其完全限定名称来引用它.
更改类的名称,使其不与要导入的类发生冲突.
在我看来,第二种解决方案更好.特别是因为NumberFormat
对你的班级来说不是一个好名字.
为什么他们只出现崇高的文字?
他们没有.您编写的代码不会使用任何符合标准的Java编译器进行编译.