关于java泛型中的?
问题描述:
老师讲到:
public class Generic <T>{
private T flag;
public void setFlag(T flag){
this.flag=flag;
}
public T getFlag(){
return this.flag;
}
}
public class Showmsg {
public void showflag(Generic<?> generic){
System.out.println(generic.getFlag());
}
}
public class Test {
public static void main(String[] args) {
Showmsg showmsg=new Showmsg();
Generic<Integer>generic1=new Generic<>();
generic1.setFlag(20);
showmsg.showflag(generic1);
Generic<Number>generic=new Generic<>();
generic.setFlag(50);
showmsg.showflag(generic);
}
}
我的理解是?和其他通配符一样,只是便于理解认为的做出划分
为了验证我的猜想,我把第一段中的T全部改成了?如下:
public class Generic <?>{
private ? flag;
public void setFlag(? flag){
this.flag=flag;
}
public ? getFlag(){
return this.flag;
}
}
但是,改完之后就全红了,idea也没给什么提示,好像?不能做通配符似的
难道?不能作为声明定义中的通配符?
我就又把代码还原,在第三段中加了一句
Generic<?>g=new Generic<>();
ok,没报错,然后又加了句
g.setFlag("56");
结果又报错了,看提示应该是56作为参数格式不对,那为什么上一句没报错呢?
另外还想问一下,各个通配符在语法上是否存在不同含义,具体使用方法又有什么不同呢?
答
泛型T相当于Object类型,“?”代表未知类型,这个类型是实现Collection接口。一般用在集合中。
如果不明白,可以参考这篇文章,讲述的很详细:https://blog.csdn.net/ikownyou/article/details/65630385
答
JAVA里面不需要那么麻烦,Object类型的变量(对象)可以表示任意类型。
答
您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~
ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓
【电脑端】戳>>> https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】 戳>>> https://mall.csdn.net/item/52471?utm_source=1146287632