java 泛型Generic

1. 背景

泛型技术诞生之前(JDK5以前),创建集合的类型都是Object 类型的元素,存储内容没有限制,编译时正常,运行时容易出现ClassCastException 异常。

public class Test {
   
	public static void main(String[] args) {
   
		ArrayList list = new ArrayList();
		list.add("java");
		list.add(100);
		list.add(true);
		for(int i = 0;i <list.size();i++) {
   
			Object o = list.get(i);
			String str = (String)o;
			System.out.println(str);
		}
	}
}

输出:
java
Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at com.chengyu.junit.Test.main(Test.java:18)

2. 泛型概念

JDK5 中引入泛型,从而可以在编译时检测是否存在非法的类型数据结构
其本质就是参数化类型,可以用于类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法

	public static void main(String[] args) {
   
		ArrayList<String> strList = new ArrayList<String>();
		strList.add("java");
		strList.add("C#");

		for(int i = 0;i < strList.size();i++) {
   
			String str = strList.get(i);
			System.out.println(str);
		}
	}

3. 泛型类

3.1 定义与调用

定义类时设置泛型,该泛型可用于类中的属性或方法中,调用该泛型类时,指定具体类型;

// 调用泛型类
public class GenericTest {
   
	public static void main(String[] args) {
   
		Generic<String> strGen = new Generic<>("a");
		String key = strGen.getKey();
		System.out.println(key);
	}
}
// 定义泛型类
// @param <T> 使用类时指定
class Generic<T>{
   
	private T key;
	public Generic(T key) {
   
		this.key = key;
	}
	public T getKey() {
   
		return key;
	}
	public void setKey(T key) {
   
		this.key = key;
	}
	@Override
	public String toString() {
   
		return "GenericTest [key=" + key + "]";
	}
}

3.2 注意

1)调用泛型类时未定义类型,则会按照Object 类型处理;
2)调用时分别指定不同类型,但本质都是Object 类型;
3)泛型不支持基本数据类型;
4)泛型类的成员方法不可以用static 修饰(泛型方法可以)。

3.3 使用

需求:抽奖活动,但抽奖内容没有确定,可能都是现金,也可能都是物品

public class ProductGetterTest {
   
	public static void main(String[] args) {
   
		// 抽物品
		ProductGetter<String> strProductGetter = new ProductGetter<>();
		String[] str = {
   "手机","电视","洗衣机"};
		for(int i = 0; i < str.length; i ++ ) {
   
			strProductGetter.addProduct(str[i]);
		}
		String strProduct = strProductGetter.getProduct();
		System.out.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值