2011-09-03 3 views
7

최종 사용자로서 Java 또는 잠시 동안 주석을 사용하고 있지만 최근에는 내 자신의 주석 유형을 작성하기로 결정했으며 Java에서 @interface로 주석을 정의하는 구문이 매우 이상하다고 생각했습니다. 제 질문은 자바가 @interface를 사용하여 열거 형과 마찬가지로 새 키워드를 도입하는 대신 주석을 정의하는 이유는 무엇입니까? @interface 구문의 장점이 있습니까?주석을 정의하는 데 @interface가 사용되는 이유는 무엇입니까?

주석 디자이너가 수행 한 설계 고려 사항을 이해하기 위해 나는 주석을 정의하기 위해 새 키워드를 도입해야한다는 생각을 가지고 있어야한다고 확신합니다.

@interface에는 너무 많은 제한이 있습니다. 예를 들어 확장을 사용할 수없는 경우 Date와 같은 특수 효과 멤버를 정의 할 때 사용할 수없는 특정 유형이 있습니다. @interface에 들어갈 수있는 것에 대한 제한이 명확하지 않으며 단지 나에게 해킹 된 것처럼 느껴집니다.

답변

0

분명히 디자이너는 키워드를 추가하고 싶지 않았습니다. 기존의 올바른 프로그램을 무효화하므로 가볍게 수행 할 수 없습니다. Cobol-9x위원회는 수십 가지의 키워드를 추가했지만 키워드는 수십 가지가 아니라 비명 소리를 들었을 것입니다. 일부 회사는 표준 기관을 고소하는 것에 대해 이야기하고있었습니다.

+0

컴파일러가 특수한 방식으로 취급하는 키워드가 아니라는 것을 자세히 설명해 주실 수 있습니까? 스펙에서는 "@ interface"와 같이 @ 인터페이스 사이의 공백을 사용하여 특수 효과 유형을 정의 할 수 있다고 말합니다 그것은 키워드처럼 느껴졌습니다. "왜 안되나요?"유일한 대답이 아닙니다. – ams

+0

@ am 나의 사과, 자바 문법을 확인했습니다. 그것은 실제로 키워드이기 때문에 제 대답을 완전히 수정했습니다. – EJP

5

나는이 특정 사건에 대한 정확한 사항을 알고 있지만, 일반적으로하지 않습니다

식별자로 특정 키워드를 사용하는 일 기존의 모든 소스 코드의 언어 나누기 호환성에 새 키워드를 소개합니다.

키워드를 피하기 위해 변경 될 때까지 기존 컴파일러 버전으로 기존 소스 코드를 컴파일 할 수 없습니다. 이를 극복하는 것이 불가능하지는 않지만 (어쨌든 enum 사례가 시연 된 것처럼), 어색하고 많은 사람들이 추가 작업을해야합니다. Java의 설계자는 일반적으로 소스 코드 호환성을 깨지 않으면 서 새로운 언어 기능을 도입하려고했습니다.

당신이 언급 한 의 경우, 그들은 (a) 다른 C- 스타일 언어의 공통 키워드, (b) 일반적으로 기존 코드의 로컬 범위 식별자로만 사용되므로 쉽게 리팩토링하고 (c) 정체없는 대안없이. 그들은 그 이익이 비용을 능가한다고 결정했습니다. 주석 처리의 경우, 그들은 명백하게 다르게 결정했다.

이 외에도 많은 고려 사항을 다루는 Josh Bloch's Effective API Design talk을 보시려면 여기를 클릭하십시오.

1

주석 선언은 일반적으로보기가 몹시 구역질납니다.

그들은 아마도 소수만 (전문가)이 주석을 선언하고 처리하기 때문에 대부분의 프로그래머는 단순히 전문가가 설계 한 주석을 사용한다고 생각했을 것입니다. 그러므로 그들은 주석 선언을 아름답게 생각하는 것을 너무 많이 생각하지 않았습니다. enum은 일상 업무에서 대부분의 프로그래머가 사용하기로되어 있으므로 구문은 간결해야합니다.

하지만 Guice/CDI와 같은 프레임 워크가 점점 더 많아지면서 앱 프로그래머는 자신의 특수 효과를 선언해야합니다. 또한 많은 프로그래머는 자신의 주석을 디자인하고 처리하기에 충분히 용감하다고 느낍니다. 어노테이션 선언의 지저분한 구문 문제는 더욱 두드러진다.

+0

동의 JSR 303 Bean 유효성 검사에서는 응용 프로그램 빌드를위한 유효성 검증의 중심성이 주어지는 복합 유효성 검사기 주석을 수행하려는 경우 개발자가 자신의 주석을 정의해야합니다. 필자가 썬 스펙에서 보았던 주석은 대부분의 개발자가 짧은 시력으로 주석을 정의하지 마십시오. – ams

관련 문제