최근 Google 도서관 Gson의 소스 코드를보고 나는 정말 이상한 것을 보았습니다 (IMO). com.google.gson.internal 패키지에는 "$"로 시작하는 두 개의 클래스가 있습니다. 예를
public final class $Gson$Types { ... }
를 들어
는 "그것은 내부 클래스입니다 원인 사용하지 마십시오"뭔가를 달러 기호가 개발에 영향을하거나 그냥 외부 개발자에게 말을하는 것입니다합니까?
최근 Google 도서관 Gson의 소스 코드를보고 나는 정말 이상한 것을 보았습니다 (IMO). com.google.gson.internal 패키지에는 "$"로 시작하는 두 개의 클래스가 있습니다. 예를
public final class $Gson$Types { ... }
를 들어
는 "그것은 내부 클래스입니다 원인 사용하지 마십시오"뭔가를 달러 기호가 개발에 영향을하거나 그냥 외부 개발자에게 말을하는 것입니다합니까?
식별자에 통화 기호 또는 연속 문자를 사용할 수 있습니다.
$를 사용하면 생성 된 것으로 나타납니다. 빌드에 의해 생성되거나 내부 용으로 만 사용됩니다. 당신은 예를 들어, 생성 된 클래스와 충돌이있는 경우
Uses for special characters in Java code
그것은 단지 문제가 발생합니다
class A {
class B {
}
}
class A$B {
}
는 컴파일러가 클래스 다이 같은 이유가 될 수있다 $
로 시작하지 않는 생성
error: duplicate class: A.B
보고합니다. 클래스에 나타날 수
윈도우 7에, 특수 문자는
public static void main(String... args) throws IOException {
for (char ch = 0; ch < Character.MAX_VALUE; ch++) {
if (Character.isJavaIdentifierStart(ch) && !Character.isLetter(ch))
System.out.println("interface " + ch + " { }");
}
}
interface $ { }
interface _ { }
interface ¢ { }
interface £ { }
interface ¤ { }
interface ¥ { }
interface € { }
다른 특수 문자는 자바로 할 수 있지만, 파일 이름으로 지원되지 않습니다. 이는 OS 및 언어에 따라 다를 수 있습니다.
컴파일러/런타임의 관점에서 볼 때, 이는 단지 G
또는 s
과 같은 이름의 일부를 구성하는 문자 일뿐입니다. 어떤 의미 적 의미도 없습니다. 을해야
식별자는 자바 문자와 자바 자리의 무제한 길이의 순서이며, 그 중 첫째 : 그러나
의 language spec 당신이$
문자 자신 식별자의 사용을 피해야한다는 것을 암시 않습니다 자바 편지.은 ...
은 "자바 문자"
는 대문자와 소문자 ASCII 라틴어 문자를 포함A
- 역사적인 이유로, 그리고, 아스키 밑줄 (Z
(\u0041
- -\u005a
), 그리고 AZ (\u007a
\u0061
)_
또는\u005f
) 및 달러 기호 ($
또는\u0024
).$
문자는 기계적으로 생성 된 소스 코드에서만 사용하거나 드물게 레거시 시스템에서 기존 이름에 액세스하는 경우에는 사용하지 않아야합니다.
아니요, 매우 잘못되었습니다. Google이 그렇게해서는 안됩니다. $ 기호는 중첩 클래스의 구분 기호로 특별히 예약되어 있습니다. JDK를 포함한 많은 코드는이 규칙 (거의 모든 사람이 준수)에 달려 있습니다.구글의 장난 꾸러기 이름 짓기 연습은 이러한 암호를 깨뜨릴 수 있습니다.
구체적인 예를 들려 줄 수 있습니까? –
"모든"통화 기호를 사용할 수 있다고 생각하지 않습니다. JLS에서 : ""Java 문자 "에는 대문자와 소문자 ASCII 라틴 문자 AZ (\ u0041 - \ u005a) 및 az (\ u0061 - \ u007a)가 포함되며 역사적인 이유로 ASCII 밑줄 (_ 또는 \ u005f)와 달러 기호 ($, or \ u0024). $ 문자는 기계적으로 생성 된 소스 코드에서만 사용되거나 드물게 레거시 시스템에서 기존 이름에 액세스하는 데 사용되어서는 안됩니다. " 예를 들어, 유로화가 유효한지 의심 스럽습니다. –
@JonSkeet 중요한 단어는 * include *입니다. € (유로) 표시를 포함하여 대부분의 통화 기호도 유효합니다. – assylias
유로는 허용되지만 소수 중 하나입니다. 윈도우 7에서 모든 것을 시도했다;) –