java泛型常用通配符实例解析

网友投稿 361 2022-12-17


java泛型常用通配符实例解析

这篇文章主要介绍了java泛型常用通配符实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

今天在看ArrayList原码是看到这样的一个符号,好奇怪。

?表示通配符,表示的意思是匹配E或E的子类,具体类型未知。

1.限定通配符

编写一个类似于ArrayList的动态数据

public class Gys

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 cs){

for(int i=0;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 gys=new Gys<>();

gys.add(25);

Gys gys2=new Gys<>();

gys2.add(2);

gys.addAll(gys2);

}

}

修改上面的代码,将addAll参数改成如下

public void addAll(Gys extend T> cs){

for(int i=0;i

add(cs.get(i));

}

}

这个时候代码编译通过了。并且能够正常的访问其中的元素。

2.无限定通配符。

改写上面的addAll方法代码。

public void addAll(Gys> cs){

for(int i=0;i

add(cs.get(i));

}

}

上面的代码编译不通过。?表示类型不确定,从安http://全角度考虑无限定的泛型,无法进行写操作。

但是可以这样使用。

/**

*判断元素是否存在

*/

public boolean isHas(Gys> gys,Object elemt){

for(int i=0;i

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。

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 cs){

for(int i=0;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 gys=new Gys<>();

gys.add(25);

Gys gys2=new Gys<>();

gys2.add(2);

gys.addAll(gys2);

}

}

修改上面的代码,将addAll参数改成如下

public void addAll(Gys extend T> cs){

for(int i=0;i

add(cs.get(i));

}

}

这个时候代码编译通过了。并且能够正常的访问其中的元素。

2.无限定通配符。

改写上面的addAll方法代码。

public void addAll(Gys> cs){

for(int i=0;i

add(cs.get(i));

}

}

上面的代码编译不通过。?表示类型不确定,从安http://全角度考虑无限定的泛型,无法进行写操作。

但是可以这样使用。

/**

*判断元素是否存在

*/

public boolean isHas(Gys> gys,Object elemt){

for(int i=0;i

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。

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 gys=new Gys<>();

gys.add(25);

Gys gys2=new Gys<>();

gys2.add(2);

gys.addAll(gys2);

}

}

修改上面的代码,将addAll参数改成如下

public void addAll(Gys extend T> cs){

for(int i=0;i

add(cs.get(i));

}

}

这个时候代码编译通过了。并且能够正常的访问其中的元素。

2.无限定通配符。

改写上面的addAll方法代码。

public void addAll(Gys> cs){

for(int i=0;i

add(cs.get(i));

}

}

上面的代码编译不通过。?表示类型不确定,从安http://全角度考虑无限定的泛型,无法进行写操作。

但是可以这样使用。

/**

*判断元素是否存在

*/

public boolean isHas(Gys> gys,Object elemt){

for(int i=0;i

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。

add(cs.get(i));

}

}

这个时候代码编译通过了。并且能够正常的访问其中的元素。

2.无限定通配符。

改写上面的addAll方法代码。

public void addAll(Gys> cs){

for(int i=0;i

add(cs.get(i));

}

}

上面的代码编译不通过。?表示类型不确定,从安http://全角度考虑无限定的泛型,无法进行写操作。

但是可以这样使用。

/**

*判断元素是否存在

*/

public boolean isHas(Gys> gys,Object elemt){

for(int i=0;i

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。

add(cs.get(i));

}

}

上面的代码编译不通过。?表示类型不确定,从安http://全角度考虑无限定的泛型,无法进行写操作。

但是可以这样使用。

/**

*判断元素是否存在

*/

public boolean isHas(Gys> gys,Object elemt){

for(int i=0;i

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。

if(gys.get(i).equawsFtUudEls(elemt)){

return true;

}

}

return false;

}

除了 extend E>用法;还有 super E>的用法,表示类型是E或E的父类。不过多介绍了,用的少。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring事务传播行为问题解决
下一篇:SpringBoot静态视频实时播放的实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~