Android_注解与泛型

来源:互联网 发布:docker 阿里云 编辑:程序博客网 时间:2024/06/05 13:23

泛型:

1:泛型类引用类型可以是泛型类

class GenericDemo1 {public static void main(String[] args) {Data<String> data1 = new Data("zhangsan");System.out.println(data1.getData());Student stu = new Student();stu.setName("lisi");Data<Student> d1 = new Data<Student>(stu);    System.out.println(d1.getData().getName());Data<Data<Student>> d2 = new Data<Data<Student>>(d1);System.out.println(d2.getData().getData().getName());}}// 泛型类class Data<T> {private T data;public Data() {}public Data(T data) {this.data = data;}public void setData(T data) {this.data  =data;}public T getData(){ return data;}}class Student {private String name;public void setName(String name) {this.name = name;}public String getName() {return name;}}class Data2 { private int data; public Data2() { } public Data2(int data) { this.data = data; }public void setData(int data) {this.data  =data; } public int getData(){  return data; }}


2:泛型类参数可以有多个

class GenericDemo2 {public static void main(String[] args) {Data<String, Integer> data1 = new Data<String, Integer>("zhangsan", 23);System.out.println(data1.getData1());System.out.println(data1.getData2());}}// 泛型类class Data<T1, T2> {private T1 data1;private T2 data2;public Data() {}public Data(T1 data1, T2 data2) {this.data1 = data1;this.data2 = data2;}public T1 getData1() {return data1;}public T2 getData2() {return data2;}}


3:泛型类可以继承泛型类

class GenericDemo3 {public static void main(String[] args) { Data1<String, Integer> data1  = new Data1("zhangsan", 23);System.out.println(data1.getData());System.out.println(data1.getData2());}}// 泛型类class Data<T> {private T data1;public Data() {}public Data(T data1) {this.data1 = data1;}public T getData() {return data1;}}class Data1<T, T2> extends Data<T> {private T2 data2;public Data1() {}public Data1(T data1, T2 data2) {super(data1);this.data2 = data2;}public T2 getData2(){return data2;}}


4:泛型类可以实现泛型接口

class GenericDemo4 {public static void main(String[] args) {GenericDemo4 gd = new GenericDemo4();gd.doMethod();}public  void doMethod() {MyData<String, Integer> data = new MyData<String,Integer>();data.setData2(23);data.getData("zhgangsan");System.out.println(data.getData2());}}interface Data<T> {void getData(T data);}class MyData<T, T2> implements Data<T> {private T2 data2;public void setData2(T2 data2) {this.data2 = data2;}public T2 getData2() {return data2;}public void getData(T data) {System.out.println(data);}}

上边界限定:

// 泛型的上边界限定,传入的类型需要继承Animalclass Data<T extends Animal> {public void show(T data) {System.out.println(data);}}



注解:

1: jdk5提供了3个标准注解,也叫标注注解,不影响程序运行

* @Override  // 标记这是重写的父类的方法


 * @SuppressWarnings("unused") //压制


 * @Deprecated   //标注此方法已过时


2:自定义注解     通过关键词@interface修饰

创建:

public @interface MyAnnotation {//      属性的类型和名字String name();int age();Class shuxing();Color color();String[] hobby();String value() default "nihao";//default "nihao"默认值}enum Color {REG,GREEN,BLUE}

使用方式:

@MyAnnotation(name = "zhangsan", age = 1, shuxing = Student.class, value = "lisi")@MyAnnotation("zhangsan")//当属性的名字为value()时,可以直接写值@MyAnnotation(hobby={"football", "basketball"})@MyAnnotation(color=Color.REG)

3:jdk5提供的4个元注解,修饰注解的注解

元注解可以修饰自己定义的注解

@Retention(RetentionPolicy.SOURCE)  //代码期间存在@Retention(RetentionPolicy.CLASS)   //编译时@Retention(RetentionPolicy.RUNTIME) // 指定注解的存活时长(代码期间存在、编译器、运行时)@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) // 指定注解可以修饰的类型@Documented // 是否在javadoc文档中生成这个注解@Inherited // 这个注释是否可以被子类继承


使用元注解,修饰了自定义注解只能在方法上使用

@Target(ElementType.METHOD)public @interface MyAnnotation {String value();}





原创粉丝点击