星期二, 十二月 01, 2015 18:30:08
给编译器看的注释---Annotation
功能建立在反射机制之上,通过An可以对程序进行注释操作。
系统内建Anon、如何自定义、反射和n的关联,
以及如何通过ation生产Donted。
本章要点
掌握Annotation的相关概念
熟悉自定义Annotation的方法
了解反射和Annotation的关联
一、Annotation
Annotation 实际上表示的是一种注释的语法。
在java中最早的程序是提倡程序与配置代码相分离,
而最新的理论是将所有的配置直接写到程序之中,如果想完成这样的功能,就要使用Annotation。
伦理片 http://www.dotdy.com/
二、系统内建的Annotation
在jdk1.5之后的系统中,内建了3个Annotation:
@Override、@Deprecated、@SuppressWarinings。
2.1 @Override
表示进行正确的覆写操作
即使覆盖的方法名称写错了,也不会有任何的提示。
此时,为了保证程序可以正确地进行覆盖操作,在覆盖的时候可以明确地使用@Override表示方法是属于覆盖的操作。
代码案例:
- package day30;
- public class OverrideTest {
- public static void main(String[] args) {
- Student s = new Student();
- System.out.print("..."+s.say());
- }
- }
- class Person {
- public String say() {
- return "Person_say()";
- }
- }
- //要求增加此类的子类,覆盖其方法
- class Student extends Person {
- /*为了保证程序可以正确地进行覆盖操作,
- * 在覆盖的时候可以明确地使用@Override表示方法是属于覆盖的操作。*/
- @Override
- public String say() {
- return "Student_say()";
- }
- }
运行结果:
...Student_say()
2.3@Deprecated
@Deprecated注释表示不建议使用的操作。
例如之前在讲解线程的时候,曾经讲解过线程中的stop()、resume()、suspend()等方法是不建议使用的。
代码案例:
- package day30;
- public class DeprecatedTest {
- public static void main(String[] args) {
- System.out.print((new Info()).getInfo());
- }
- }
- class Info {
- /*@Deprecated注释表示不建议使用的操作。*/
- @Deprecated
- public String getInfo() {
- return "getInfo()....";
- }
- }
运行结果:
getInfo()....
2.4 @SuppressWarnings
@SuppressWarnings表示的是压制警告。
如果有一些警告信息则可压制掉,不出现警告的提示。
@SuppressWarnings(“deprecation”)
使用SuppressWarnings操作的时候可以同时压制多个警告
通过SuppressWarnings的类,可以发现在此类中存在一个value的字符串数组。
Person类中既继承了Info类,又实现了序列化的接口,所有此时会出现多个警告。
或者可以明确的表示,是为SuppressWarnings中的value属性赋值。
代码案例:
- package day30;
- import java.io.Serializable;
- public class SuppressWarningsTest {
- @SuppressWarnings("deprecation")
- public static void main(String[] args) {
- System.out.print((new Infos()).getInfos());
- }
- }
- class Infos {
- @Deprecated
- public String getInfos() {
- return "....getInfos";
- }
- }
- @SuppressWarnings(value = {"serial","deprecation"})
- class Persona extends Infos implements Serializable {
- /*Person类中既继承了Info类,又实现了序列化的接口,所此时会出现多个警告。*/
- }
运行结果:
....getInfos
三、自定义Annotation
影音先锋电影 http://www.iskdy.com/
3.1定义Annotation的语法
public @interface Annotation的名称{}
案例:
public @interface MyAnnotation{
}
如果现在使用此Annotation的话,若不在同一个包中,则需要导入,导入之后使用@的形式反问,语法@MyAnnotation
@MyAnnotation
public class Info{
}
在一个Annotation中实际上也可以定义若干个属性。
public @interface MyAnnotation{
public String key();
public String value();
}
在此时Annotation中定义了key和value两个变量,若此时要使用Annotation的话,则必须明确地给出具体的内容。
@MyAnnotation(key="MLDN",value="www.baidu.com")
如果现在希望为一个Annotation设置默认内容的话,可以通过default完成。
public @interface MyAnnotation{
public String key() default “LXX”;
public String value() default “HA”;
}
如果没有设置内容,则将默认值去除继续使用。
Annotation中的变量内容可以通过枚举指定范围。
public enum Color {
RED,GREEN,BLUE;
}
本文深入探讨了Java中Annotation的使用,包括内置的Annotation如@Override、@Deprecated、@SuppressWarnings,以及如何自定义Annotation和利用反射关联它们。通过具体代码案例,展示了如何实现方法覆盖、压制警告,并自定义Annotation来提高代码的可读性和功能性。

219

被折叠的 条评论
为什么被折叠?



