泛型,是什么?
泛型是 在定义类和接口时, 不确定形参什么类型,在传入实参后,才知道该用什么形参类型。增加程序的灵活性。
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());
}
}
}
浙公网安备 33010602011771号