java 基础(泛型)

泛型,是什么?

泛型是 在定义类和接口时, 不确定形参什么类型,在传入实参后,才知道该用什么形参类型。增加程序的灵活性。

	public static void main(String[] args) {
		// List是带一个参数类型的泛型接口
		// 所谓泛型就是在创建类、接口时,指定形参,以确定该对象传入的实参类型。
		// 该形参可以在类当中作为类型使用,如:List<E>,而List<String> 是将E替换成了String,就可以实际使用了。
		
		List<String> list=new ArrayList<String>();
		list.add("泛型测试");
		// 下面会编译错误
		//list.add(5);
	}

 上面是list的,下面是class的:

package com.creditharmony.adapter.testCase.test;

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

public class Apple<T> {

	// 使用形参定义参数
	private T info;

	public Apple() {

	}

	// 下面使用形参来定义构造参数
	public Apple(T info) {
		this.info = info;
	}

	public T getInfo() {
		return info;
	}

	public void setInfo(T info) {
		this.info = info;
	}

	public static void main(String[] args) {
		// 根据实参是什么类型的来确定T的写法,这里T是String
		Apple<String> a1 = new Apple<String>("苹果");
		System.out.println(a1.getInfo());
		// 根据实参是什么类型的来确定T的写法,这里T是Double
		Apple<Double> a2 = new Apple<Double>(5.6);
		System.out.println(a2.getInfo());
		
		// 类型通配符?
		List<CircleShape> listCircleShapes=new ArrayList<CircleShape>() ;
		CircleShape circleShape=new CircleShape("red", 2.2);
		listCircleShapes.add(circleShape);
		testTpf2(listCircleShapes);
		
	}
	// 如果不设定形参,则默认是Object型,出现警告,会运行时报错
	public void testTpf(List c) {
		for (int i = 0; i < c.size(); i++) {
		 System.out.println(c.get(i));
		}
	}
	// 如果不设定形参,则默认是Object型
	// List<?> 可以是任何list类型的父类
	public void testTpf1(List<?> c) {
		for (int i = 0; i < c.size(); i++) {
			System.out.println(c.get(i));
		}
	}
	// List<? extends ShapeTest> 可以是任何list 但父类是 ShapeTest类型 的父类
	// ShapeTest 是该泛型的上限
	public static void testTpf2(List<? extends ShapeTest> c) {
		for (int i = 0; i < c.size(); i++) {
			System.out.println(c.get(i).getColor());
		}
	}
}

 
原文地址:https://www.cnblogs.com/hoge/p/6347544.html