Android_注解与泛型

泛型:

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);
	}
}

上边界限定:

// 泛型的上边界限定,传入的类型需要继承Animal
class 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();
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值