【问题标题】:Compile time error when using "new double"使用“new double”时的编译时间错误
【发布时间】:2013-01-09 22:45:46
【问题描述】:

我创建了一个哈希表,并尝试使用枚举来打印出键和值。当我尝试编译代码时,我不断收到一个编译时错误,说我需要在新的双精度中放入一个“[”,我已经放入哈希表中。

编译前: Toys.put("Race Car", new double (29.99));

编译时错误说我需要这样放置:

toys.put("Race Car", new double [29.99]);

我做错了什么?

public static void main(String[] args)  {
  Hashtable toys = new Hashtable();
  Enumeration toyName;
  String getToyName;
  double priceOfToy;
  toys.put("Race Car", new double(29.99));
  toys.put("Toy Bear", new double(15.99));
  toys.put("Action Figure", new double(9.99));
  //Show prices of each toy
  toyName = toys.keys();
  //Uses hasMoreElements method from enumeration to check what is in the hashtable
  while (toyName.hasMoreElements())  {
    //uses nextElement method from enumeration interface to 
    getToyName = (String) toyName.nextElement();
    System.out.println(getToyName +  "is now priced at " + toys.get(getToyName));
  }

}

【问题讨论】:

  • 你还在用 Java 1.4 吗?
  • 我对 java 还是很陌生,我在哪里检查?
  • 您不能new 原始类型。但是,由于自动装箱(从 1.5 开始),只需使用:toys.put("Minigun", 999.99)。另外,请在问题中包含确切复制粘贴错误消息。
  • 我按照你说的@pst 的方式对其进行了格式化,这就是我上次编译时收到的警告:注意:/Applications/../.. 使用未经检查或不安全的操作。注意:重新编译 -Xlint:unchecked for details
  • @pst 我已经做到了,它甚至没有接近帮助我。感谢您一如既往的支持。

标签: java syntax compiler-errors


【解决方案1】:

Java 集合不能保存原始类型。你需要改变

toys.put("Race Car", new double(29.99))

toys.put("Race Car", new Double(29.99))

它使用Double 包装器类型。

您也可以简单地使用自动装箱

toys.put("Race Car", 29.99)

请注意,我没有测试最后一个以确保它有效。

【讨论】:

    【解决方案2】:

    Map 只接受对象,不接受原语,double 是原语,Double 是 Object。 并考虑为您的集合使用泛型类型:

    Hashtable<String, Double> toys = new Hashtable<String, Double>();     
         toys.put("Race Car", new Double(29.99));
          toys.put("Toy Bear", new Double(15.99));
          toys.put("Action Figure", new Double(9.99));}
    

    【讨论】:

      【解决方案3】:

      double 是原始类型。请改用包装类Double。由于泛型的限制,集合不能保存原始类型的值,您必须使用包装器。

      编译器显示此警告是因为它假设您要实例化一个数组,这可以使用new double [22] 来完成。

      另外,如果您使用 Java 1.5 或更高版本,您可以使用原始值代替包装器值,它们会自动转换为包装对象。

      【讨论】:

        【解决方案4】:

        包装double 的类是Double(大写很重要)。

        所以:

        toys.put("Race Car", new Double(29.99));
        

        另外,从 Java 5 开始,支持自动装箱(自动将双精度转换为双精度),所以

         toys.put("Race Car", 29.99d));
        

        完全一样。

        【讨论】:

          【解决方案5】:

          要么使用Double

          toys.put("Race Car", new Double(29.99));
          toys.put("Toy Bear", new Double(15.99));
          toys.put("Action Figure", new Double(9.99));
          

          或java原语double

          toys.put("Race Car", 29.99);   // Java 1.5 or higher, makes use of inboxing
          toys.put("Toy Bear", 15.99);
          toys.put("Action Figure", 9.99);
          

          Java 原语不是类,也没有构造函数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-16
            相关资源
            最近更新 更多