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