java-泛型<T> Generic Types

1.关于泛型:

   为什么需要泛型?

          使用集合时可能发生安全的问题,可以向集合中放入任何类型。

         从集合中获取元素,需要进行类型的强制转换。

 2.使用泛型:使用泛型方法,泛型类


3.具体代码

public class Dao<T> {// 泛型类的声明

	public void add(T t) {
	}

	public void update(T t) {
	}

	public void delete(T t) {
	}

	public T select(int id) {
		T result = null;
		return result;
	}

	public List<T> selectAll() {

		return null;
	}

	public Object getProperty(int id) {
		return null;
	}

	// 在方法的返回值前面声明类型方法<>,
	public <E> E getPropertyNew(int id) { // 泛型方法的声明
		return null;
	}

}

public class Client {

	public void saveUser() {
		Dao<Person> dao = new Dao<>();
		Person t = new Person();
		dao.add(t);
		Person p = dao.select(1);
		System.out.println(p);

		List<Person> personList = new ArrayList<>();
		List<Student> studentList = new ArrayList<>();

		printPersons1(personList);
		printPersons1(studentList); //error
		// The method printPersons1(List<Person>) in the type Client is not
		// applicable for the arguments (List<Student>)
		// 泛型通配符的应用 ? extends
		printPersons2(personList);
		printPersons2(studentList);

		// 泛型方法
		String name = (String) dao.getProperty(0);
		// 返回类型不确定,用了Object ,但是要强制转化,太麻烦
		String new_name = dao.getPropertyNew(0); // 不用强制转换了吧,好爽啊
	}

	public static void printPersons1(List<Person> persons) {

	}

	public static void printPersons2(List<? extends Person> persons) {
		// ? extends Person
		// 只要继承Person就行了

	}
}

4.泛型的应用

   

public static void main(String[] args) {
		// 泛型应用
		// 1.集合-->数组
		Collection<Person> persons = new ArrayList<>();
		persons.add(new Person(1, "张三", 20));
		persons.add(new Person(2, "李四", 21));
		persons.add(new Person(3, "王五", 22));
		persons.add(new Person(4, "赵六", 23));
		persons.add(new Person(5, "田七", 24));

		// 普通方式的遍历,还要强制转化
		Object[] person = persons.toArray();
		for (Object o : person) {
			Person p = (Person) o;
			System.out.println(p);
		}
		// 直接这样呢,执行会报错的 Exception in thread "main" java.lang.ClassCastException:
		// [Ljava.lang.Object; cannot be cast to [Lcom.cnpc.generic.Person;
		// Person[] person = (Person[]) persons.toArray();
		// System.out.println(person);

		// 要使用牛x方式了
		Person[] personsNew = persons.toArray(new Person[0]);// 注意这种写法哦
		for (Person p : personsNew)
			System.out.println(p);

		// 2.Map的遍历
		Map<String, Person> personMap = new HashMap<>();
		personMap.put("1=", new Person(1, "张三", 20));
		personMap.put("2=", new Person(2, "李四", 21));
		personMap.put("3=", new Person(3, "王五", 22));
		personMap.put("4=", new Person(4, "赵六", 23));
		personMap.put("5=", new Person(5, "田七", 24));

		// 此种方式必须泛型,否则编译都出错
		for (Map.Entry<String, Person> entity : personMap.entrySet()) {
			String key = entity.getKey();
			Person val = entity.getValue();
			System.out.println(key + " - " + val);
		}
	}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值