주석(Annotation)이란 무엇입니까?
주석(annotation)은 Java가 메타프로그램의 요소에 대해 모든 정보와 메타데이터(메타데이터)를 연결하기 위해 제공하는 방법 및 방법입니다. Annotation(annotation)은 인터페이스입니다. 프로그램은 리플렉션을 통해 지정된 프로그램 요소의 Annotation 개체를 얻은 다음 Annotation 개체를 통해 주석에 포함된 메타데이터를 얻을 수 있습니다.
Annotation은 JDK5.0 이상 버전에 도입되었습니다. 문서를 작성하고, 코드의 종속성을 추적하고, 기본적인 컴파일 타임 검사를 수행하는 데에도 사용할 수 있습니다. 어떤 면에서 주석은 수정자처럼 사용되며 패키지, 유형, 생성자, 메서드, 멤버 변수, 매개변수 및 지역 변수의 선언에 적용됩니다. 이 정보는 Annotation의 "name=value" 구조 쌍에 저장됩니다.
Annotation의 멤버는 Annotation 유형에서 매개변수 없는 메소드 형태로 선언됩니다. 해당 메서드 이름과 반환 값은 멤버의 이름과 유형을 정의합니다. 여기에는 특정 기본 구문이 있습니다. 모든 Annotation 멤버의 기본값을 선언하는 것이 허용됩니다. Annotation은 기본값을 정의하지 않는 Annotation 멤버의 값으로 이름=값 쌍을 사용할 수 있습니다. =value 쌍은 다른 멤버 값의 기본값을 재정의하는 데에도 사용할 수 있습니다. 이는 클래스의 상속 특성과 다소 유사합니다. 상위 클래스의 생성자를 하위 클래스의 기본 생성자로 사용할 수 있지만 하위 클래스에서 재정의할 수도 있습니다.
주석은 모든 정보를 특정 프로그램 요소(클래스, 메서드, 멤버 변수 등)와 연결하는 데 사용할 수 있습니다. 여기에는 기본 규칙이 있습니다. 주석은 프로그램 코드의 실행에 영향을 미칠 수 없습니다. 주석이 추가되거나 삭제되더라도 코드는 일관되게 실행됩니다. 또한 일부 주석은 Java의 리플렉션 API 메서드를 통해 런타임에 액세스되지만 Java 언어 인터프리터는 작업하는 동안 이러한 주석을 무시합니다. 주석 유형이 코드에서 "작동하지 않는" 것은 Java 가상 머신이 주석을 무시하기 때문입니다. 주석 유형의 정보는 일부 지원 도구를 통해서만 액세스하고 처리할 수 있습니다. 이 기사에서는 표준 Annotation 및 메타 주석 유형을 다룰 것입니다. 이러한 주석 유형과 함께 제공되는 도구는 Java 컴파일러입니다(물론 특별한 방법으로 이를 처리합니다).
메타데이터(metadata)란 무엇입니까:
메타데이터는 "데이터에 관한 데이터"를 의미하는 메타데이터라는 단어에서 번역됩니다.
메타데이터에는 많은 기능이 있습니다. 예를 들어 Javadoc 주석을 사용하여 문서를 자동으로 생성했을 수 있습니다. 이는 메타데이터 기능의 한 유형입니다. 일반적으로 메타데이터는 문서 작성, 코드 종속성 추적, 컴파일 시간 형식 확인 수행, 기존 구성 파일 대체에 사용될 수 있습니다. 메타데이터의 역할을 분류하자면 현재 명확한 정의는 없지만 역할에 따라 대략 3가지로 나눌 수 있습니다.
1. 문서 작성: 코드에서 식별된 메타데이터를 통해 문서 생성
2. 코드 분석: 코드에서 식별된 메타데이터를 통해 코드를 분석합니다.
3. 컴파일 확인: 코드에서 식별된 메타데이터를 통해 컴파일러는 기본적인 컴파일 확인을 구현할 수 있습니다.
Java에서는 메타데이터가 태그 형태로 존재합니다. 메타데이터 태그의 내용은 프로그램 코드의 컴파일 및 실행에 영향을 미치지 않습니다. 다른 파일을 생성하거나 런타임에 실행되는 코드의 설명 정보를 아는 데만 사용됩니다.
요약하자면:
먼저 메타데이터는 Java 코드에 태그 형태로 존재합니다.
둘째, 메타데이터에 설명된 정보는 유형이 안전합니다. 즉, 메타데이터 내의 필드에는 명확한 유형이 있습니다.
셋째, 메타데이터는 다른 프로그램 구성 요소를 생성하기 위해 컴파일러 이외의 도구를 통한 추가 처리가 필요합니다.
넷째, 메타데이터는 Java 소스 코드 수준에만 존재할 수도 있고, 컴파일된 클래스 파일 내에 존재할 수도 있습니다.
주석 및 주석 유형:
주석:
주석은 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 유형을 언급합니다.
주석 카테고리:
Annotation 매개변수 수에 따라 Annotation을 세 가지 카테고리로 나눌 수 있습니다:
1. Marker Annotation: 멤버 정의가 없는 Annotation 유형을 Mark Annotation이라고 합니다. 이 주석 유형은 정보를 제공하기 위해 자체 존재 여부만 사용합니다. 예를 들어 다음 시스템 주석 @Override; 2. 단일 값 주석
3. 완전한 주석
1. JDK 내장 시스템 주석
2 . 메타 주석
3. 사용자 정의 주석
@Override: 상위 클래스의 메서드를 덮어쓰기 위해 이 메서드를 수정하는 데 사용됩니다.
@Deprecated: 사용되지 않는 메서드를 수정하는 데 사용됩니다.
@SuppressWarnings: 알리는 데 사용됩니다. 특정 컴파일 경고를 억제하는 Java 컴파일러.
public class Fruit { public void displayName(){ System.out.println("水果的名字是:*****"); } } class Orange extends Fruit { @Override public void displayName(){ System.out.println("水果的名字是:桔子"); } } class Apple extends Fruit { @Override public void displayname(){ System.out.println("水果的名字是:苹果"); } }
AppleService类的showTaste() 方法被@Deprecated标注为过时方法,在FruitRun类中使用的时候,编译器会给出该方法已过期,不推荐使用的提示。
SuppressWarnnings,抑制编译器警告:
@SuppressWarnings 被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0,sun提供的javac编译器为我们提供了-Xlint选项来使编译器对合法的程序代码提出警告,此种警告从某种程度上代表了程序错误。例如当我们使用一个generic collection类而又没有提供它的类型时,编译器将提示出"unchecked warning"的警告。通常当这种情况发生时,我们就需要查找引起警告的代码。如果它真的表示错误,我们就需要纠正它。例如如果警告信息表明我们代码中的switch语句没有覆盖所有可能的case,那么我们就应增加一个默认的case来避免这种警告。
有时我们无法避免这种警告,例如,我们使用必须和非generic的旧代码交互的generic collection类时,我们不能避免这个unchecked warning。此时@SuppressWarning就要派上用场了,在调用的方法前增加@SuppressWarnings修饰,告诉编译器停止对此方法的警告。
SuppressWarning不是一个标记注解。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于javac编译器来讲,被-Xlint选项有效的警告 名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。
annotation语法允许在annotation名后跟括号,括号中是使用逗号分割的name=value对用于为annotation的成员赋值。实例如下:
public class FruitService { @SuppressWarnings(value={ "rawtypes", "unchecked" }) public static List<fruit> getFruitList(){ List<fruit> fruitList=new ArrayList(); return fruitList; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static List<fruit> getFruit(){ List<fruit> fruitList=new ArrayList(); return fruitList; } @SuppressWarnings("unused") public static void main(String[] args){ List<string> strList=new ArrayList<string>(); } }</string></string></fruit></fruit></fruit></fruit>
在这个例子中SuppressWarnings annotation类型只定义了一个单一的成员,所以只有一个简单的value={...}作为name=value对。又由于成员值是一个数组,故使用大括号来声明数组值。注意:我们可以在下面的情况中缩写annotation:当annotation只有单一成员,并成员命名为"value="。这时可以省去"value="。比如将上面方法getFruit()的SuppressWarnings annotation就是缩写的。
SuppressWarnings注解的常见参数值的简单说明:
1.deprecation:使用了不赞成使用的类或方法时的警告;
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.all:关于以上所有情况的警告。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:159610322 我们一起学Java!
위 내용은 Java에 대한 심층적인 이해: 주석의 기본 개념의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!