【问题标题】:Sublime Text cannot recognize NumberFormatSublime Text 无法识别 NumberFormat
【发布时间】:2018-02-14 09:14:06
【问题描述】:

我在 (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

据我所知,代码没有错误。此外,此代码 sn-p 输出 US: $1000.32,就像在所有其他 IDE 和文本编辑器上一样。有人可以解释这些错误是什么意思吗?为什么它们只出现在崇高的文本中?

【问题讨论】:

    标签: java sublimetext3 number-formatting


    【解决方案1】:

    我认为您应该将您的类名修改为与导入的类名不同的类,或者您可以将源更改为 java.text.NumberFormat defaultFormat = java.text.NumberFormat.getCurrencyInstance();

    【讨论】:

      【解决方案2】:

      问题是您已经将一个名为NumberFormat 的类导入到同名的类中。这会导致混淆 NumberFormat 实际指的是哪个类。

      (混淆实际上在您的脑海中。Java 语言规范对此很清楚。它说 NumberFormat 将专门引用您的类。导入无效。任何兼容的 Java 编译器都会做出相同的解释。 )

      有两种解决方案:

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

      2. 更改您的类的名称,使其不会与您正在导入的类发生冲突。

      在我看来,第二种解决方案更好。特别是因为NumberFormat 无论如何都不是你班级的好名字。


      为什么它们只出现在崇高的文本中?

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

      【讨论】:

        【解决方案3】:

        导入 java.text.NumberFormat

        与同一文件中定义的类型冲突。更改您的班级名称将解决问题。

        【讨论】:

          【解决方案4】:

          这不是 Sublime 的问题。 Sublime 只是从你的路径调用 javac 命令。如果你在 sublime 之外使用 javac 编译,你会得到相同的结果

          更改类名或成为显式包名的一部分可以解决问题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多