2017-09-06 7 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 

내가 알 수있는 한, 코드에는 오류가 없습니다. 또한이 코드 조각은 다른 모든 IDE 및 텍스트 편집기와 마찬가지로 US: $1000.32을 출력합니다. 누군가이 오류의 의미를 설명 할 수 있습니까? 왜 독점적으로 숭고한 텍스트로 나타나는가? 문제는 당신이에 NumberFormat라는 클래스를 가져온 것입니다

답변

3

내가 가져온 클래스 이름과 다른 클래스에 클래스 이름을 수정해야한다고 생각하거나 java.text.NumberFormat defaultFormat = java.text.NumberFormat.getCurrencyInstance();

5

당신에게 소스를 변경할 수 있습니다 같은 이름의 클래스. 이로 인해 실제로 NumberFormat 클래스가 혼동스러워집니다.

(실제로 혼란이 있습니다. 자바 언어 사양은 분명합니다. NumberFormat은 클래스에 독점적으로 참조됩니다. 가져 오기가 영향을주지 않습니다. 호환되는 Java 컴파일러는 동일한 해석을합니다.)

  1. 클래스를 가져 오지 마십시오

    는 두 가지 해결책이 있습니다. 대신 정규화 된 이름을 사용하여 참조하십시오.

  2. 가져 오는 클래스와 충돌하지 않도록 클래스 이름을 변경하십시오.

내 마음에는 두 번째 해결책이 더 좋습니다. 어쨌든 NumberFormat은 수업에 적합한 이름이 아니기 때문에 특히 그렇습니다.


그리고 그들은 독점적으로 숭고한 텍스트로 발생하는 이유는 무엇입니까?

그들은 그렇지 않습니다. 작성한 코드는 Java 컴파일러와 호환되지 않습니다. 같은 파일에 정의 된 유형

+0

내 실수를 해결 숭고한

변경 클래스 이름 외부 javac의를 사용하거나 명시 적으로 패키지 이름의 일부가 될 컴파일 할 경우 동일한 결과를 얻을. –

0

수입 java.text.NumberFormat의

충돌합니다. 클래스 이름을 변경하면 문제가 해결됩니다.

1

이것은 숭고함의 문제는 아닙니다. Sublime은 경로에서 javac 명령을 호출하기 만하면됩니다. 당신이 상세한 답변을 문제에게 감사를