为什么EnumMap为空值分配Object类对象?

时间:2017-05-27 17:00:04

标签: java enum-map

我正在研究Java EnumMap实现,并发现如果我将null值传递给EnumMap,EnumMap会分配一个Object类对象来代替null Value。

来自EnumMap类的代码:

<!DOCTYPE html>
    <html>
    <head>
        <title>Dynamic table</title>

        <script src="https://code.jquery.com/jquery-1.8.3.min.js" integrity="sha256-YcbK69I5IXQftf/mYD8WY0/KmEDCv1asggHpJk1trM8="
      crossorigin="anonymous"></script>

      <script>

        $(document).ready( function() {

           $('#butVal').click(function(){
             var rowLen =  $('tr.tabRow').length;

             if(rowLen>9)
             {
                  alert("no of row is reached 10");
             }
             else
             {
               $("tr.tabRow:first").clone(true).appendTo("#table-2>tbody"); 



            $(".tabRow:last").children("td").children("input").each(function(index, element){
                $(element).val("");
            });



            }
            });


        $(document).on("click", "button.remove", function(){

         if($(this).parents("tr").siblings("tr.tabRow").length > 0)
          {
             $(this).closest("tr.tabRow").remove();        
          }
         else
         {
            alert("you can.t remove this record");
         }
        });


            $(document).on("click", ".add, .remove", function(){

               $("td.sno").each(function(index,element){                 
                   $(element).text(index + 1); 
                });
            });
        });



    </script>

    </head>
    <body>

        <div class="total">
            <table id="table-2" class="add" border ="1">
                <thead>
                <tr>
                    <th class="small">S.No</th>
                    <th class="sizing"> Description</th><th>Quantity</th>
                    <th> Price </th> 
                    <th><button id="butVal"> + </button></th>
                    </tr> 
                </thead>

                <tbody>
                <tr class="tabRow" id="1item">
                <td class="sno">1</td>
                <td> <input class="desc" type="text" name="desc"/>  </td>
                <td> <input class="qty" type="text" name="qty"/> </td>
                <td> <input class="price" type="text" name="price"/> </td>
                <td><button class="remove">Remove</button></td>
                </tr>
                </tbody>

            </table>
        </div>

    </body>
</html>

我的问题是为什么java放置一个对象代替直接为给定键赋值空值。这样做有什么好处。

1 个答案:

答案 0 :(得分:4)

它允许区分从未添加到地图的键和添加了null值的键。您甚至可以在引用的代码中看到这一点:

if (oldValue == null)
    size++;

如果以前使用此密钥将null放入地图,则oldValue将为NULL,且尺寸不会更改。