龙猫12138 2017-05-25 01:37 采纳率: 0%
浏览 1267
已采纳

java里面,关于set的元素的添加的问题,下面有代码(标题不方便叙述)

 HashSet<String> set = new HashSet<String> () ;
set.add("abc") ;

这样写能够添加abc这个字符串。
但是如果前边的string变成问号就会报错,这是为什么呢?

 HashSet<?> set = new HashSet<String> () ;
set.add("abc") ;
  • 写回答

4条回答 默认 最新

  • oyljerry 2017-05-25 02:11
    关注

    Collection<?>这样一个类型,读作“未知Colleciton”。它的意思是说Colleciton的元素类型可以匹配任意类型,我们把它称作通配符类型,我们这样写:

     void printCollection(Colleciton<?> c){ 
           for (Object e: c){ 
              System.out.println(e); 
            } 
         } 
    

    现在我们用任意类型的集合来调用它了,需要注意的是内部方法printColleciton(),我们任可以从c中来读出元素,并且这些元素是Object类型,而且是安全的,因为无论集合中是什么类型,它总包括Object,但是将任意对象加到集合中是不安全的:

         Colleciton<?> c = new ArrayList<String>(); 
         c.add(new Object());//编译时错误 
    

    由于我们不知道c持有的是什么类型的元素,我们不能加object到集合中去。add()方法用类型E作为参数,(集合的元素类型)当真正的参数类型是?的时候,它代表的是一些未知类型。任何传递给add()方法的参数必须是这个未知类型的子类型。由于我们不知道未知类型,所以我们传递给它任何东西。主要的例外是null,它是每一个类型的成员。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用