zoukankan      html  css  js  c++  java
  • Document

    泛型的通配符: ?

    作用:
    作为方法的参数集合的泛型使用,可以接收任意的数据类型
    不能创建对象使用

    初级使用:

    我把一些注释,都写在了详细的文档中。

     1 package com.cyl.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 
     6 public class Demo2 {
     7     public static void main(String[] args) {
     8         ArrayList<Integer> list1 = new ArrayList<>();
     9         list1.add(1);
    10         list1.add(2);
    11 
    12         ArrayList<String> list2=new ArrayList<>();
    13         list2.add("hello1");
    14         list2.add("hello2");
    15 
    16         printArraylist(list1);
    17         System.out.println("#############不同类型的分割线#############");
    18         printArraylist(list2);
    19 
    20 
    21     }
    22 
    23     /*
    24         定义一个可以对,任意数据类型打印的ArrayList
    25         采用三种方式打印
    26      */
    27     private static void printArraylist(ArrayList<?> list) {
    28         System.out.println("------迭代器遍历------");
    29         Iterator<?> it = list.iterator();
    30         while (it.hasNext()){//遍历的ArrayList,采用while
    31             Object o = it.next();//采用Object来接收任意数据类型
    32             System.out.println(o);
    33         }
    34         System.out.println("----foreach遍历----");
    35         for (Object o:
    36              list) {
    37             System.out.println(o);
    38         }
    39         System.out.println("----for循环----");
    40         for (int i = 0; i < list.size(); i++) {
    41             System.out.println(list.get(i));
    42         }
    43     }
    44 }
    View Code

    运行效果图:

     高级使用(泛型设定)

    上限限定: ? extends E 传递的未知的数据类型?只能是E的子类,或者E本身
    下限限定: ? super E 传递的未知的数据类型?只能是E的父类,或者E本身

     1 public static void main(String[] args) {
     2         Collection<Integer> integers = new ArrayList<>();
     3         Collection<String>  strings=new ArrayList<String>();
     4         Collection<Number> numbers = new ArrayList<Number>();
     5         Collection<Object> objects = new ArrayList<Object>();
     6 
     7         /*
     8            测试一:泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
     9          */
    10         integers.add(1);
    11         getElement1(integers);
    12         getElement1(strings);//报错
    13         getElement1(numbers);
    14         getElement1(objects);//报错
    15 
    16         /*
    17             测试二:泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    18          */
    19 
    20         getElement2(integers);//报错
    21         getElement2(strings);//报错
    22         getElement2(numbers);
    23         getElement2(objects);
    24     }
    25 
    26     //此时必须是Number类型,或是Number类型的子类。
    27     public static void getElement1(Collection<? extends Number> coll) {
    28         System.out.println(coll);
    29     }
    30 
    31     //泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    32     public static void getElement2(Collection<? super Number> coll) {
    33         System.out.println(coll);
    34     }
    View Code

    引申一下看下Number的API:

    抽象类 NumberBigDecimalBigIntegerByteDoubleFloatIntegerLongShort 类的超类。

    Number 的子类必须提供将表示的数值转换为 bytedoublefloatintlongshort 的方法.

  • 相关阅读:
    json参数http post请求
    获取文本的节点数据
    mongodb robo3t 查询所有 更改固定的50一页
    mongdb 更新字段类型
    数据库表的统计表更新 解决Sql Timeout 时间已到的问题
    html背景图圆角图片设置方法
    abp.vnext vue 跨域设置
    Springboot结合ESAPI——配置XSS过滤
    centos docker安装rabbitmq
    JAVA byte[]转String 中文问题
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/10972735.html
Copyright © 2011-2022 走看看