必威体育Betway必威体育官网
当前位置:首页 > IT技术

java通配符的详解

时间:2019-08-21 06:43:11来源:IT技术作者:seo实验室小编阅读:73次「手机版」
 

通配符

java中,?代表通配符。

通配符用法
 1. 在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义

 2. <? extends Object>代表上边界限定通配符

 3. <? super Object>代表下边界限定通配符。
上边界限定通配符

上边界通配符直接使用add()方法受限,但是可以用来获取各种数据类型的数据,并赋值给父类型的引用。

List<? extends Number> list=null;
list=new ArrayList<integer>();
list.add(new Integer(1));//报错,因为list不能确定实例化的对象具体类型导致add()方法受限
...
list.get(0);//正确

正确用法:



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

public class Main {
    public static void main(String[] args) {
        firstprint();
        secondPrint();
    }

    public static void firstPrint() {
        List<Float> list1 = new ArrayList<>();//使用 Float作实参类型
        list1.add(12.3f);
        list1.add(23.4f);
        print(list1);
    }

    public static void secondPrint() {
        List<Integer> list2 = new ArrayList<>();//使用Integer作实参类型
        list2.add(1);
        list2.add(2);
        list2.add(3);
        print(list2);
    }

    public static void print(List<? extends Number> list) {// 通配符作形参
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));// 使用get方法
        }
    }
}

下边界限定通配符

下边界通配符使用get()方法受限(不使用强转),但是可以添加特定类型的值,用于将对象写入到一个数据结构里

List<? super Integer> list = null;
list = new ArrayList<Number>();
list.add(1);
Number number = list.get(0);//报错,因为List<? super Integer>不知道list存放的对象具体类型,则使用get获取到的值不确定。
...
list.add(1);//正确

正确用法:


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

public class Main {
    public static void main(String[] args) {
        List<Number> list = new ArrayList<>();
        firstInflate(list);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        list.clear();
        secondInflate(list);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    public static void firstInflate(List<? super Integer> list) {// 装填整数
        list.add(1);
        list.add(2);
        list.add(3);
    }

    public static void secondInflate(List<? super Float> list) {// 装填浮点数
        list.add(1.1f);
        list.add(2.2f);
        list.add(1.3f);
    }
}
总结
  • 列表内容
  • 限定通配符总是包括自己
  • 上界类型通配符:add方法受限
  • 下界类型通配符:get方法受限
  • 如果你想从一个数据类型里获取数据,使用 ? extends 通配符
  • 如果你想把对象写入一个数据结构里,使用 ? super 通配符
  • 如果你既想存,又想取,那就别用通配符
  • 不能同时声明泛型通配符上界和下界

相关阅读

Java数组类型

数组是一种数据结构,用来存储同一类型之的集合。通过一个整形下标可以访问数组中的每一个值。在声明数组变量时,需要指出数据类型和

java.lang.NumberFormatException: For input string:

我遇到的这个错误是在执行查询的时候遇到的错误,所以就不说因为类型转换引起的原因了 先贴上相关的sql 其实报这个错误的原因就是

JAVA 数组

dataType[] arrayRefVar; // 数组的声明 首选的方法 arrayRefVar = new dataType[arraySize]; /* 上面的语法语句做了

2019JAVA面试题附答案

JAVA基础 JAVA中的几种基本类型,各占用多少字节? 下图单位是bit,非字节 1B=8bitString能被继承吗?为什么?不可以,因为String类有final

RxJava2 Flowable blocking系列

目录 1 blockingFirst 2 blockingForEach 3 blockingIterable 4 blockingLast 5 blockingLatest 6 blockingMostRecent 7 blo

分享到:

栏目导航

推荐阅读

热门阅读