java泛型常用通配符实例解析
作者:思思博士 发布时间:2022-09-16 22:14:50
标签:java,泛型,通配,符
这篇文章主要介绍了java泛型常用通配符实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
今天在看ArrayList原码是看到这样的一个符号,好奇怪。
?表示通配符,表示的意思是匹配E或E的子类,具体类型未知。
1.限定通配符
编写一个类似于ArrayList的动态数据
public class Gys<T> {
private final static int default_capacity =10;
private int endIndex =0;
private Object[] elemts;
public Gys() {
this.elemts = new Object[default_capacity];
}
public void add(T t){
if(elemts.length-1< endIndex){
int newCapcti= default_capacity *2;
elemts= Arrays.copyOf(elemts,newCapcti);
}
elemts[endIndex++]=t;
}
public void addAll(Gys<T> cs){
for(int i=0;i<cs.size();i++){
add(cs.get(i));
}
}
public int size(){
return endIndex;
}
public T get(int i){
if(i< endIndex){
return (T) elemts[i];
}
throw new RuntimeException("索引超出界限");
}
public static void main(String[] args) {
Gys<Number> gys=new Gys<>();
gys.add(25);
Gys<Integer> gys2=new Gys<>();
gys2.add(2);
gys.addAll(gys2);
}
}
修改上面的代码,将addAll参数改成如下
public void addAll(Gys<? extend T> cs){
for(int i=0;i<cs.size();i++){
add(cs.get(i));
}
}
这个时候代码编译通过了。并且能够正常的访问其中的元素。
2.无限定通配符。
改写上面的addAll方法代码。
public void addAll(Gys<?> cs){
for(int i=0;i<cs.size();i++){
add(cs.get(i));
}
}
上面的代码编译不通过。?表示类型不确定,从安全角度考虑无限定的泛型,无法进行写操作。
但是可以这样使用。
/**
*判断元素是否存在
*/
public boolean isHas(Gys<?> gys,Object elemt){
for(int i=0;i<gys.size();i++){
if(gys.get(i).equals(elemt)){
return true;
}
}
return false;
}
除了<? extend E>用法;还有<? super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。
来源:https://www.cnblogs.com/guoyansi19900907/p/12142234.html


猜你喜欢
- 目录@Configuration + @Bean@Componet + @ComponentScan@Import注解导入@Import直接
- 1. 程序计数器(线程私有)程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器(切换线程后,能恢复到正确的执行位
- 前言前段时间看到一道面试题:“main函数可以被重载么?”,当时就蒙圈了,怎么还会有这种面试题,现在
- 1、存储在App内部最简单的一种。在尝试过程中发现,手机中很多文件夹都没有权限读写。我们可以将我们需要写的文件存放到App中的files文件
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 在安卓操作系统下对于 TextView 字体的支持非常有限,默认情况下 TextView 的 typeface 属性支持 "San
- 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号
- 在Spring Boot的众多Starter POMs中有一个特殊的模块,它不同于其他模块那样大多用于开发业务功能或是连接一些其他外部资源。
- System.ComponentModel.Design.DesignSurface是为设计组件提供一个用户界面,通过它可以实现一个简单的窗
- 这两天看到Hibernate的代理部分,第一反应是底层使用了反射,针对用户实体生成了代理类,后来反应过来了,反射没有任何可以产生新类的能力,
- 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督。本文从最简单的一个排序算法——桶排序开始,分析桶排序的实现思路,代码实现,性
- File 类:文件和目录路径名的抽象表示。注意:File 类只能操作文件的属性,文件的内容是不能操作的。1、File 类的字段我们知道,各个
- 导入后gradle building 一直到跑,卡住了,一般是gradle没有下载,又下不下来的原因。去 http://serv
- Android之选项菜单和子菜单学习笔记,供大家参考,具体内容如下菜单简介:菜单在桌面应用中使用十分广泛,几乎所有的桌面应用都有菜单。但是随
- 前言其实一般的程序猿根本不用了解这么深,只有当你到了一定层次,需要了解jvm内部运行机制,或者高并发多线程下,你写的代码对内存有影响,你想做
- 本文是利用SharpPcap实现网络包的捕获的小例子,实现了端口监控,数据包捕获等功能,主要用于学习分享。什么是SharpPcap?Shar
- 一、场景Java实现文件上传到服务器本地,并通过url访问有个需求,前端上传文件,需要用开关的方式同时支持上传七牛和服务器本地,方便不同的用
- 知道弱引用和软引用的概念与如何使用它们是两码事,引用类在垃圾回收工作的过程中有重要作用。我们都知道垃圾回收器会回收符合回收条件的对象的内存,
- 本文实例为大家分享了java实现自动登录的具体代码,供大家参考,具体内容如下当你勾选(记住登录状态),用cookie保存用户名和密码。不勾选
- 一、常见的锁策略1.1 乐观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正 式对数据是否产生并