温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java类型通配符应用举例分析

发布时间:2021-11-19 16:05:52 来源:亿速云 阅读:147 作者:iii 栏目:编程语言

本篇内容主要讲解“Java类型通配符应用举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java类型通配符应用举例分析”吧!

一 点睛

List<String>对象不能被当成List<Object>对象使用,也就是说:List<String>类并不是List<Object>类的子类。

数组和泛型有所不同:假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类型;但G<Foo>不是G<Bar>的子类型。

为了表示各种泛型List的父类,我们需要使用类型通配符,类型通配符是一个问号(?),将一个问号作为类型实参传给List集合,写作:List<?>(意思是未知类型元素的List)。这个问号(?)被称为通配符,它的元素类型可以匹配任何类型。

二 泛型的优良设计

1 代码

import java.util.*;public class ArrayErr{  public static void main(String[] args)  {   // 定义一个Integer数组   Integer[] ia = new Integer[5];   // 可以把一个Integer[]数组赋给Number[]变量   Number[] na = ia;   // A 处   // 下面代码编译正常,但运行时会引发ArrayStoreException异常   // 因为0.5并不是Integer   na[0] = 0.5;  // B 处   List<Integer> iList = new ArrayList<>();   // 下面代码导致编译错误   //List<Number> nList = iList; // C 处  }}

2 运行

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Double at ArrayErr.main(ArrayErr.java:23)

3 说明

A处的代码不会引起编译错误,但会在B处引发运行错误。

B出的代码直接引起编译错误。

这正是数组和泛型的区别,泛型的设计由于数组,能及早发现错误而不是到运行时才发现。

三 实战——使用类型通配符

1 代码

import java.util.*;public class ArrayErr{  public static void main(String[] args)  {   List<String> c = new ArrayList<String>();   c.add("第一个");   c.add("第二个");   test(c);   // 下面这种用法是错误的,这种类型通配不能加元素   List<?> wrongList = new ArrayList<String>();   //wrongList.add(new Object());  }  // 这种问号类型通配符表示各种泛型的父类,它的元素类型可以匹配任意类型,可以用到遍历中  public static void test(List<?> c)  {   for(int i=0;i<c.size();i++)   {     System.out.println(c.get(i));   }  }}

2 运行

第一个第二个

3 说明

类型通配符可用于遍历场景,不可用于添加场景。

到此,相信大家对“Java类型通配符应用举例分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI