java泛型常用通配符实例解析
作者:思思博士 时间:2022-09-16 22:14:50
这篇文章主要介绍了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
标签:java,泛型,通配,符
0
投稿
猜你喜欢
Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框示例
2022-03-29 15:15:49
Spring Boot CLI使用教程
2023-03-30 03:37:02
Android 将文件下载到指定目录的实现代码
2021-06-11 04:44:41
java 排序算法之快速排序
2022-07-23 17:39:03
C#调用WebService的方法介绍
2022-06-05 01:10:30
在Android上实现HttpServer的示例代码
2022-02-20 04:04:14
java实现Xml与json之间的相互转换操作示例
2023-06-21 13:30:39
Spring中bean集合注入的方法详解
2022-08-26 07:37:41
两种用空格分隔的java字符串的方式
2023-10-01 05:51:04
浅谈关于Java的GC垃圾回收器的一些基本概念
2021-11-14 10:42:52
Java通过反射将 Excel 解析成对象集合实例
2023-05-22 18:49:02
Eclipse下Javassist正确使用方法代码解析
2021-07-24 18:43:57
Java BufferedImage转换为MultipartFile方式
2022-07-13 10:02:46
SpringBoot常用数据库开发技术汇总介绍
2023-11-11 09:39:22
Android自定义View实现带4圆角或者2圆角的效果
2023-04-08 04:32:10
C# javascript 读写Cookie的方法
2023-03-19 08:03:16
Java实现链表数据结构的方法
2023-10-19 20:36:57
C#实现char字符数组与字符串相互转换的方法
2022-01-18 05:28:52
C#使用round函数四舍五入的方法
2022-01-19 04:33:57
MyBatis控制台显示SQL语句的方法实现
2021-10-18 04:10:00