주석이란 무엇입니까?
주석(annotation)은 모든 정보와 메타데이터(메타데이터)를 메타프로그램의 요소와 연관시키기 위해 Java에서 제공하는 방법 및 방법입니다. Annotation(annotation)은 인터페이스입니다. 프로그램은 리플렉션을 통해 지정된 프로그램 요소의 Annotation 개체를 얻은 다음 Annotation 개체를 통해 주석에 포함된 메타데이터를 얻을 수 있습니다.
Annotation(annotation)은 JDK5.0 이상 버전에서 도입되었습니다. 문서를 작성하고, 코드의 종속성을 추적하고, 기본적인 컴파일 타임 검사를 수행하는 데에도 사용할 수 있습니다. 어떤 면에서 주석은 수정자처럼 사용되며 패키지, 유형, 생성자, 메서드, 멤버 변수, 매개변수 및 지역 변수의 선언에 적용됩니다. 이 정보는 Annotation의 "name=value" 구조 쌍에 저장됩니다.
Annotation의 멤버는 Annotation 유형에서 매개변수 없는 메소드로 선언됩니다. 해당 메서드 이름과 반환 값은 멤버의 이름과 유형을 정의합니다. 여기에는 특정 기본 구문이 있습니다. 모든 Annotation 멤버의 기본값을 선언하는 것이 허용됩니다. Annotation은 기본값을 정의하지 않는 Annotation 멤버의 값으로 이름=값 쌍을 사용할 수 있습니다. =value 쌍은 다른 멤버 값의 기본값을 재정의하는 데에도 사용할 수 있습니다. 이는 클래스의 상속 특성과 다소 유사합니다. 상위 클래스의 생성자를 하위 클래스의 기본 생성자로 사용할 수 있지만 하위 클래스에서 재정의할 수도 있습니다.
주석을 사용하면 모든 정보를 프로그램 요소(클래스, 메서드, 멤버 변수 등)와 연결할 수 있습니다. 여기에는 기본 규칙이 있습니다. 주석은 프로그램 코드의 실행에 영향을 미칠 수 없습니다. 주석이 추가되거나 삭제되더라도 코드는 일관되게 실행됩니다. 또한 일부 주석은 Java의 리플렉션 API 메서드를 통해 런타임에 액세스되지만 Java 언어 인터프리터는 작업하는 동안 이러한 주석을 무시합니다. 주석 유형이 코드에서 "작동하지 않는" 것은 Java 가상 머신이 주석을 무시하기 때문입니다. 주석 유형의 정보는 일부 지원 도구를 통해서만 액세스하고 처리할 수 있습니다. 이 기사에서는 표준 Annotation 및 메타 주석 유형을 다룰 것입니다. 이러한 주석 유형과 함께 제공되는 도구는 Java 컴파일러입니다(물론 특별한 방법으로 이를 처리합니다).
------------------------------------- ----------------------------------
메타데이터(메타데이터)란 무엇입니까?
메타데이터는 "데이터에 관한 데이터"를 의미하는 메타데이터라는 단어에서 번역됩니다.
예를 들어, Javadoc 주석을 사용하여 문서를 자동으로 생성했을 수 있습니다. 이는 메타데이터 기능의 한 유형입니다. 일반적으로 메타데이터는 문서 작성, 코드 종속성 추적, 컴파일 시간 형식 확인 수행, 기존 구성 파일 대체에 사용될 수 있습니다. 메타데이터의 역할을 분류하자면 현재로서는 명확한 정의가 없지만, 역할에 따라 대략 3가지로 나눌 수 있습니다.
1. 문서 작성: 코드에서 식별된 메타데이터를 통해 문서 생성 2. 코드 분석: 코드에서 식별된 메타데이터를 통해 코드 분석 3. 컴파일 확인: 코드에서 식별된 메타데이터를 사용하여 컴파일러가 기본 컴파일을 수행할 수 있는지 확인 Java의 메타데이터는 Java 코드에 태그 형태로 존재합니다. 메타데이터 태그의 존재는 프로그램 코드의 컴파일 및 실행에 영향을 주지 않으며 다른 파일을 생성하거나 런타임에 실행되는 코드를 아는 데에만 사용됩니다. 정보.
요약하면:
첫째, 메타데이터는 Java 코드에 태그 형태로 존재합니다.
둘째, 메타데이터에 설명된 정보는 유형이 안전합니다. 즉, 메타데이터 내의 필드에는 명확한 유형이 있습니다.
셋째, 메타데이터에는 다른 프로그램 구성 요소를 생성하는 데 사용되는 컴파일러 이외의 도구를 통한 추가 처리가 필요합니다.
넷째, 메타데이터는 Java 소스 코드 수준에만 존재할 수도 있고, 컴파일된 클래스 파일 내에 존재할 수도 있습니다.
------------------------------------- ----------------------------------
주석 및 주석 유형:
주석:
Annotation은 java5.0에 도입된 새로운 구문을 사용하며 해당 동작은 public 및 final과 같은 수정자와 매우 유사합니다. 각 주석에는 이름과 멤버 수가 >=0입니다. Annotation의 각 멤버에는 name=value 쌍(javabean과 마찬가지로)이라는 이름과 값이 있으며 name=value는 Annotation 정보를 로드합니다.
주석 유형:
주석 유형은 주석의 이름, 유형 및 멤버 기본값을 정의합니다. Annotation 타입은 특별한 Java 인터페이스라고 할 수 있으며, 해당 멤버 변수는 제한되어 있으며 Annotation 타입을 선언할 때 새로운 구문이 필요합니다. Java Reflection API를 통해 Annotation에 액세스하면 반환 값은 Annotation 유형 인터페이스를 구현하는 객체가 됩니다. 이 객체에 액세스하면 해당 Annotation 멤버에 쉽게 액세스할 수 있습니다. 다음 장에서는 java5.0의 java.lang 패키지에 포함된 세 가지 표준 Annotation 유형을 언급합니다.
------------------------------------- ----------------------------------
주석 카테고리:
주석 매개변수의 수에 따라 주석을 세 가지 범주로 나눌 수 있습니다.
1. Mark Annotation : 멤버 정의가 없는 Annotation 형태를 Mark Annotation이라고 한다. 이 주석 유형은 정보를 제공하기 위해 자체 존재 여부만 사용합니다. 예를 들어 다음 시스템 주석 @Override;
2. 단일 값 주석 3. 전체 주석
주석의 용도와 목적에 따라 주석을 세 가지 범주로 나눌 수 있습니다.
1. JDK 내장 시스템 주석 2. 메타 주석 3. 사용자 정의 주석
------------------------------------- ----------------------------------
시스템 내장 표준 주석:
주석 구문은 @ 기호 사용을 제외하면 기본적으로 Java의 고유 구문과 일치하며 java.lang에 정의된 세 가지 표준 주석이 있습니다.
@Override: 상위 클래스의 메서드를 재정의하기 위해 이 메서드를 수정하는 데 사용됩니다.
@Deprecated: 더 이상 사용되지 않는 메서드를 수정하는 데 사용됩니다.
@SuppressWarnings: 특정 컴파일 경고를 억제하도록 Java 컴파일러에 알리는 데 사용됩니다.
내장된 세 가지 표준 주석의 기능과 사용 시나리오를 차례로 살펴보겠습니다.
------------------------------------- ----------------------------------
@Override, 상위 클래스 메서드 재정의를 제한합니다.
@Override는 메소드에 주석을 추가하는 데 사용되는 마커 주석 유형입니다. Annotation된 메소드가 상위 클래스의 메소드를 오버로드하여 Assertion 역할을 하는 것을 보여줍니다. 부모 클래스 메서드를 재정의하지 않는 메서드에서 이런 종류의 주석을 사용하면 Java 컴파일러는 컴파일 오류로 경고합니다. 이 주석은 부모 클래스 메서드를 재정의하려고 시도하지만 잘못된 메서드 이름을 작성할 때 종종 작동합니다. 사용법은 매우 간단합니다. 이 주석을 사용할 때 수정된 메서드 앞에 @Override를 추가하면 됩니다. 다음 코드는 @Override를 사용하여 상위 클래스를 재정의하려는 시도의 displayName() 메서드를 수정하는 예이지만 철자 오류가 있습니다.
공공 무효 디스플레이 이름(){
System.out.println("과일 이름은 *****");
}
}
클래스 Orange는 Fruit {를 확장합니다.
@보수
공공 무효 디스플레이 이름(){
System.out.println("과일 이름은 주황색입니다.");
}
}
클래스 Apple은 Fruit {를 확장합니다.
@보수
공개 무효 표시 이름(){
System.out.println("과일 이름은 사과입니다.");
}
}
@Deprecated, 해당 태그는 더 이상 사용되지 않습니다.
마찬가지로 Deprecated도 마크업 주석입니다. 유형 또는 유형 멤버가 @Deprecated로 장식되면 컴파일러는 이 주석이 달린 프로그램 요소의 사용을 권장하지 않습니다. 그리고 이러한 종류의 수정에는 어느 정도 "연속성"이 있습니다. 상속이나 덮어쓰기를 통해 코드에서 이 오래된 유형이나 멤버를 사용하는 경우 상속되거나 재정의된 유형이나 멤버가 @Deprecated로 선언되지 않았더라도 컴파일러는 여전히 경고해야 합니다. 너.
@Deprecated 주석 유형과 javadoc의 @deprecated 태그 사이에 차이가 있다는 점은 주목할 가치가 있습니다. 전자는 Java 컴파일러에 의해 인식되는 반면 후자는 javadoc 도구에 의해 인식되어 문서(왜 프로그램을 포함하는지 포함)를 생성하는 데 사용됩니다. 멤버는 더 이상 사용되지 않으며 이를 금지하거나 대체하는 방법에 대한 설명입니다.
Java 5.0에서 Java 컴파일러는 여전히 @deprecated Javadoc 태그를 찾고 이를 사용하여 이전 버전에서와 마찬가지로 경고 메시지를 생성합니다. 하지만 이 상황은 후속 버전에서 바뀔 것이므로 이제 @deprecated javadoc 태그 대신 더 이상 사용되지 않는 메소드를 장식하기 위해 @Deprecated를 사용하기 시작해야 합니다.
다음 프로그램에서는 @Deprecated 주석을 사용하여 메서드를 만료된 것으로 표시하는 동시에 메서드 주석에 @deprecated 태그를 사용하여 메서드를 만료된 것으로 표시합니다.
/**
* @deprecated 이 방법은 만료되었으므로 권장되지 않습니다.
*/
@더 이상 사용되지 않음
공공 무효 showTaste(){
System.out.println("과일 사과의 맛은 아삭아삭하고 달콤합니다.");
}
공개 무효 showTaste(int typeId){
if(유형Id==1){
System.out.println("과일 사과의 맛은 신맛입니다.");
}
else if(typeId==2){
System.out.println("과일 사과의 맛은 달콤합니다.");
}
또 다른{
System.out.println("과일 사과의 맛은 아삭아삭하고 달콤합니다.");
}
}
}
공개 클래스 FruitRun {
/**
* @param 인수
*/
공개 정적 무효 메인(String[] args) {
애플 apple=new Apple();
apple.displayName();
AppleService appleService=새로운 AppleService();
appleService.showTaste();
appleService.showTaste(0);
appleService.showTaste(2);
}
}
------------------------------------- ----------------------------------
SuppressWarnings, 컴파일러 경고 억제:
@SuppressWarnings는 클래스, 메서드, 멤버 변수 및 변수 초기화에 대한 컴파일러 경고를 선택적으로 끄는 데 사용됩니다. java5.0에서 sun이 제공하는 javac 컴파일러는 컴파일러가 합법적인 프로그램 코드에 대해 경고할 수 있도록 -Xlint 옵션을 제공합니다. 이 경고는 어느 정도 프로그램 오류를 나타냅니다. 예를 들어, 유형을 제공하지 않고 일반 컬렉션 클래스를 사용하면 컴파일러는 "확인되지 않은 경고" 경고 메시지를 표시합니다. 일반적으로 이런 일이 발생하면 경고를 발생시킨 코드를 찾아야 합니다. 만약 그것이 정말로 오류를 나타낸다면, 우리는 그것을 바로잡아야 합니다. 예를 들어 경고 메시지에 코드의 스위치 문이 가능한 모든 사례를 포함하지 않는다는 내용이 표시되면 이 경고를 피하기 위해 기본 사례를 추가해야 합니다.
때때로 우리는 이 경고를 피할 수 없습니다. 예를 들어, 제네릭이 아닌 이전 코드와 상호 작용해야 하는 제네릭 컬렉션 클래스를 사용할 때 이 확인되지 않은 경고를 피할 수 없습니다. @SuppressWarning은 호출된 메서드 앞에 @SuppressWarnings 수정을 추가하여 컴파일러에게 이 메서드에 대한 경고를 중지하도록 지시하는 데 유용합니다.
SuppressWarning은 마크업 주석이 아닙니다. 여기에는 String[] 유형의 멤버가 있으며, 이 멤버의 값은 금지된 경고 이름입니다. javac 컴파일러의 경우 -Xlint 옵션에 유효한 경고 이름은 @SuppressWarings에도 유효하며 컴파일러는 인식할 수 없는 경고 이름을 무시합니다.
주석 구문을 사용하면 주석 이름 뒤에 괄호가 올 수 있으며, 괄호 안에는 주석 구성원에 값을 할당하는 데 사용되는 쉼표로 구분된 이름=값 쌍이 있습니다. 예는 다음과 같습니다:
@SuppressWarnings(value={ "rawtypes", "unchecked" })
공개 정적 목록<과일> getFruitList(){
List<과일>fruitList=new ArrayList();
과일목록을 반환합니다.
}
@SuppressWarnings({ "rawtypes", "unchecked" })
공개 정적 List<Fruit> getFruit(){
List<과일>fruitList=new ArrayList();
과일목록을 반환합니다.
}
@SuppressWarnings("사용되지 않음")
공개 정적 무효 메인(문자열[] 인수){
List<String> strList=new ArrayList<String>();
}
}
SuppressWarnings에 의해 주석이 달린 공통 매개변수 값에 대한 간략한 설명:
1.deprecation: 더 이상 사용되지 않는 클래스나 메서드를 사용할 때 경고합니다.
2. unchecked: unchecked 변환이 수행될 때 경고합니다. 예를 들어 컬렉션을 사용할 때 저장된 컬렉션 유형을 지정하는 데 제네릭이 사용되지 않습니다.
3.fallthrough: Switch 프로그램 블록이 Break 없이 다음 상황으로 직접 연결될 때 경고합니다.
4.path: 클래스 경로, 소스 파일 경로 등에 존재하지 않는 경로가 있을 때 경고;
5.serial: 직렬화 가능 클래스에 serialVersionUID 정의가 누락된 경우 경고;
6.finally: finally 절을 정상적으로 완료할 수 없을 때 경고합니다.
7.all: 위의 모든 상황에 대한 경고입니다.