这篇文章给大家分享的是有关java泛型常用通配符的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
?表示通配符,表示的意思是匹配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的父类。不过多介绍了,用的少。
感谢各位的阅读!关于“java泛型常用通配符的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。