泛型

1. 基本泛型


package cn.a_generic;

import org.junit.Test;

/**
 * 泛型方法/泛型类
 */
public class GenericDemo<T> {

	// 定义泛型方法
	public <K> T save(T t,K k) {
		return null;
	}
	
	public void update(T t) {

	}
	
	// 测试方法
	@Test
	public void testMethod() throws Exception {
		
		// 泛型类:  在创建爱泛型类对象的时候,确定类型
		GenericDemo<String> demo = new GenericDemo<String>();
		demo.save("test", 1);
	}
}

2.  基本用法

package cn.a_generic;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

/**
 * 泛型基本用法
 * @author Jie.Yuan
 *
 */
public class App {

	// 运行时期异常 
	@Test
	public void testGeneric() throws Exception {
		// 集合的声明
		List list = new ArrayList();
		list.add("China");
		list.add(1);
		
		// 集合的使用
		String str = (String) list.get(1);
		
	}
	
	// 使用泛型
	@Test
	public void testGeneric2() throws Exception {
		// 声明泛型集合的时候指定元素的类型
		List<String> list = new ArrayList<String>();
		list.add("China");
//		list.add(1);// 编译时期报错
		
		String str = list.get(1); 
	}
	
	/*
	 * 泛型擦除实例 
	 
	public void save(List<Person> p){
	}
	public void save(List<Dept> d){    // 报错: 与上面方法编译后一样
	}
	*/
	
	// 泛型写法
	@Test
	public void testGeneric3() throws Exception {

		// 声明泛型集合,集合两端类型必须一致
		List<Object> list = new ArrayList<Object>();
		List<String> list1 = new ArrayList<String>();
		List list2 = new ArrayList<String>();
		List<Integer> list3 = new ArrayList();
		
		// 错误
		//List<Object> list4 = new ArrayList<String>();
		// 错误: 泛型类型必须是引用类型,不能为基本类型
		// List<int> list5 = new ArrayList<int>();
	}
	
}

3. 限定元素范围(上限)

package cn.a_generic;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

/**
 * 泛型, 涉及到一些关键字
 * 
 * Ctrl + shift + R   查看当前项目中类
 * Ctrl + shift + T   查看源码jar包中的类
 * @author Jie.Yuan
 *
 */
public class App_extends {
	
	
	/**
	 * list集合只能处理 Double/Float/Integer等类型
	 * 限定元素范围:元素的类型要继承自Number类  (上限)
	 * @param list
	 */
	public void save(List<? extends Number> list) {
	}

	@Test
	public void testGeneric() throws Exception {
		List<Double> list_1 = new ArrayList<Double>();
		List<Float> list_2 = new ArrayList<Float>();
		List<Integer> list_3 = new ArrayList<Integer>();
		
		List<String> list_4 = new ArrayList<String>();
		
		// 调用
		save(list_1);
		save(list_2);
		save(list_3);
		//save(list_4);
	}
}

4.限定元素范围(下限)

package cn.a_generic;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

/**
 * 泛型, 涉及到一些关键字
 * 
 * Ctrl + shift + R   查看当前项目中类
 * Ctrl + shift + T   查看源码jar包中的类
 * @author Jie.Yuan
 *
 */
public class App_super {
	
	
	/**
	 * super限定元素范围:必须是String父类   【下限】
	 * @param list
	 */
	public void save(List<? super String> list) {
	}

	@Test
	public void testGeneric() throws Exception {
		// 调用上面方法,必须传入String的父类
		List<Object> list1 = new ArrayList<Object>();
		List<String> list2 = new ArrayList<String>();
		
		List<Integer> list3 = new ArrayList<Integer>();
		//save(list3);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值