泛型

在集合中使用泛型:
1.集合接口或集合类在jsdk5.0时都修改为带泛型的结构。
2.在实例化集合类时,可以指明具体的泛型类型。
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(方法,构造器,属性等)使用到类的泛型的位置,都指定为实例化的泛型类型,
比如:add(E e),实例化以后,add(Integer e)。
4.泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型时,使用包装类。
5.如果实例化时没有指明泛型的类型,默认类型为Object类型
自定义泛型结构
一、泛型类,泛型接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Order<T> { String name; int id; //类的内部结构可以使用类的泛型 T orderT; public Order() { } public Order(String name, int id, T orderT) { this .name = name; this .id = id; this .orderT = orderT; } public T getOrderT() { return orderT; } public void setOrderT(T orderT) { this .orderT = orderT; } } |
没有使用泛型
1 2 3 4 5 6 7 8 9 10 | public class GenericTest { @Test public void test(){ //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 Order order = new Order(); order.setOrderT( 213 ); order.setOrderT( "abc" ); } } |
使用泛型
1 2 3 4 5 6 | @Test public void test(){ Order<String> order = new Order<>( "a" , 123 , "bbb" ); order.setOrderT( "111" ); order.setOrderT( "abc" ); } |
1 2 3 4 5 6 7 8 9 | public class SubOrder extends Order<Integer> { //不是泛型类 } @Test public void test1(){ //由于子类在继承带泛型的父类时,指明了泛型的类型,则实例化子类对象时,不再需要指明泛型 SubOrder subOrder = new SubOrder(); subOrder.setOrderT( 1 ); } |
注意:
1.类中的静态方法中,不能使用类的泛型
2.异常类不能声明为泛型类
3.不能声明:T[] arr = new T[10]; 可以这样声明:T[] arr = (T[]) new T[10];
二、泛型方法:
1 2 3 4 5 6 7 8 9 10 11 | public class SubOrder<Integer> extends Order<Integer> { //泛型方法 public <E>List<E> copyFromArrayToList(E[] arr){ List<E> list = new ArrayList<>(); for (E e : arr){ list.add(e); } return list; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class SubOrder<T> extends Order<Integer> { //泛型方法 //可以声明为静态的,泛型参数是在调用方法时确定的,并非在实例化时确定的 public <E>List<E> copyFromArrayToList(E[] arr){ List<E> list = new ArrayList<>(); for (E e : arr){ list.add(e); } return list; } } @Test public void test2(){ SubOrder<String> subOrder = new SubOrder<>(); Integer[] nums = new Integer[]{ 1 , 2 , 3 , 4 , 5 }; //泛型方法在调用时,指明泛型参数的类型 List<Integer> list = subOrder.copyFromArrayToList(nums); } |
通配符:?
类A是B的父类,G<A>和G<B>是没有关系的,二者共同的父类是G<?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律