Annotation
1、本次预计讲解的知识点
1、Annotation的作用
2、三种内置的Annotation的使用。
2、具体内容
对于软件程序开发实际上经过了三个发展过程:
·第一个过程:将所有与配置相关的内容直接写到代码之中。
·第二个过程:将配置与程序代码独立,即:程序运行时候根据配置文件进行操作。 |---最严重问题:一个项目里配置文件过多,根本就无法查询错误。
·第三个过程:配置信息对用户而言无用,而且胡乱的修改还会导致程序错误,所以可将配置信息写回到程序里面,但是利用一些明显的标记来区分配置信息与程序。
Annotation是JDK1.5最大的特色,利用注解的形式来实现程序的不同功能实现。
在java SE里面支持自定义Annotation的开发,并且提供三个最为常用的基础Annotation:@Override、@Deprecated、@SuppressWarnings。
2.1、准确的覆写:@OVerride
如果在输出对象的时候希望其可以返回需要的内容,那么要进行覆写toString()方法。
范例:有没有可能在开发中出现以下形式。
class Book{ public String tostring(){//原本打算覆写toStiring() return "this is a book"; } } | 这时明显没有成功进行toString()方法的覆写,这个错误无法在编译时候发现,只能够在程序运行的时候发现。 |
所以此时为了告诉编译器,toStirng()应该是覆写方法,则可加上”@Override”,明确的告诉编译器,这个方法应该是覆写来的,如果不是要报错。
class Book{ @Override//只要正确覆写了,就不会出现编译的语法错误。 public String tostring(){ return "this is a book"; } } | E:\java>javac -d . TestDemo.java TestDemo.java:3: 错误: 方法不会覆盖或实现超类型的方法 @Override//只要正确覆写了,就不会出现编译的语法错误。 ^ 1 个错误 |
以后编写代码里面如果使用了Eclipse,会自动生成这样的注解。
2.2、声明过期的操作:@Deprecated
如果说现在由一个专门负责完成某些功能的工具包,里面由一个Hello类,在Hello类里面有一个fun()方法,在所有项目最初的发展阶段,fun()方法非常完善,但是后来随着开发技术的不断加强,发现这个fun()方法功能不足,于是这个时候对于开发者有两个选择。
·选择一:直接在新版本的工具包里面取消掉fun()方法,同时直接给出新的fun2()方法。
·选择二:在新版本的开发包里面保存fun()方法,但是通过某种途径告诉新的开发者,此方法有问题,并且提供fun2()方法供开发者使用。
很明显第二种方法较适用,因为第二种可以兼顾已使用项目的情况。这时可用”@Deprecated”来声明
范例:声明过期操作。
package cn.mldn.demo; class Book{ @Override//只要正确覆写了,就不会出现编译的语法错误。 public String toString(){ return "this is a book"; } @Deprecated public void fun(){ System.out.println("过期操作方法"); }
} public class TestDemo{ public static void main(String[] args){ Book book = new Book(); book.fun(); } } |
E:\java>javac -d . TestDemo.java 注: TestDemo.java使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 E:\java>java cn.mldn.demo.TestDemo 过期操作方法
利用此操作可以很好实现方法功能的新旧交替。 |
2.3、压制警告:@SuppressWarnings
可以压制多个警告
范例:观察警告
package cn.mldn.demo; class Book<T>{ private T title; @Override//只要正确覆写了,就不会出现编译的语法错误。 public String toString(){ return "hello world"; } @Deprecated public void fun(){ System.out.println(this.title); } public void setTitle(T title){ this.title = title; }
} | public class TestDemo{ public static void main(String[] args){ Book book = new Book(); book.setTitle("Hello"); book.fun(); } }
E:\java>javac -d . TestDemo.java 注: TestDemo.java使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: TestDemo.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
E:\java>java cn.mldn.demo.TestDemo Hello |
那么如果说现在开发者故意留下的警告信息,但是又不希望其总是提示警告,就可以选择压制警告。
范例:压制警告
package cn.mldn.demo; class Book<T>{ private T title; @Override//只要正确覆写了,就不会出现编译的语法错误。 public String toString(){ return "hello world"; } @Deprecated public void fun(){ System.out.println(this.title); } public void setTitle(T title){ this.title = title; }
} | public class TestDemo{ @SuppressWarnings({"rawtypes","unchecked"}) public static void main(String[] args){ Book book = new Book(); book.setTitle("Hello"); book.fun(); } }
E:\java>javac -d . TestDemo.java 注: TestDemo.java使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 E:\java>java cn.mldn.demo.TestDemo Hello |
相当于取消了警告提示信息。
3、总结
1、可以发现如果使用开发工具,所有Annotation实际上都不需要我们去编写。
2、清楚三个java的Annotation作用。