泛型

概念

感觉和C++里的模板类与模板函数差不多。但还是有些规则不一样

分类:

1. 泛型类:

Class Test<T> {
	private T variable;
	Test(T key) {
		this.vatiable = key;
	}
	T Get() {
		return this.variable;
	}
}

【注】:1. 在java中,泛型的类型,不能是简单类。即不能是int,double等类型
2. 即使是泛型类,在声明时,也可以不定义类型。即Test x = new Test(1);Test y = new Test(“2”);

2. 泛型接口:

与泛型类基本一致,只不过分了两种情况

  1. 当泛型接口,未传入泛型实参时:
//此时实现接口的类,也必须变成泛型类,否则会报错
Class Test<T> implements interface<T> {
	@override
	T function(){
		....;
	}
}
  1. 当泛型接口,已出入泛型实参:

这个方法好像有点憨憨,回来再学。

3. 泛型方法:

我的理解是:在方法里定义的泛型,不需要在意方法所在的类,是否是泛型类。因此判断一个方式是否是泛型方法的唯一办法,就是在方法的声明部分,是否有<T>。
【注】:在一个方法中存在泛型,不一定就是泛型方法,如:

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Date x = Test.<Date>GetInstance("java.util.Date");
		System.out.println(x);
	}
}
class Test<E> {
	static <T> T GetInstance(String name) {// 这才是一个泛型方法
		try {
			Class x = Class.forName(name);
			return (T) x.newInstance();
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}
	public E function(E key) {  //这不是一个泛型方法
		System.out.println(key);
		return key;
	}
}

泛型通配符

1.分类:

  1. extends:上界通配符,规定集合里所有的元素,都必须是此类或其子类
  2. super:下界通配符,规定集合里的元素,都必须是此类或其父类

2. 用法:

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Main.<TNode>function(new ArrayList<tnode>());//编译正常
		Main.<tnode>function(new ArrayList<TNode>());//编译失败
	}
	static <T> void function(ArrayList<? extends T> list) {
		for(int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}
}
class TNode {
	int date;
}
class tnode extends TNode{
	int x;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值