zoukankan      html  css  js  c++  java
  • List元素为泛型时的注意事项

    最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调。

    编码的过程,遇到一个关于List的小问题。

    在调用List.add(E e)的时候范了一个小毛病,很自然地认为list中存储的是 E  对象的另一个实例,其实存储的只是实例的引用。

    复现问题:

    泛型:Shit类

    1 public class Shit {
    2 
    3     private int id;
    4     private String description;
    5     private String owner;
    6     
    7   getters and setters;           
    8 }

    测试类:

     1 public class CasualTest {
     2     public static void main(String[] args) {
     3 
     4         List<Shit> list =Lists.newArrayList();
     5 
     6         Shit shit = new Shit();
     7         shit.setId(1);
     8         shit.setDescription("a");
     9         list.add(shit);
    10         shit.setId(2);
    11         shit.setDescription("b");
    12         list.add(shit);
    13 
    14         Shit shit1 = new Shit();//这里new了一个对象
    15         shit1.setId(3);
    16         shit1.setDescription("c");
    17         list.add(shit1);
    18 
    19         shit1.setId(3);
    20         shit1.setDescription("c");
    21         list.add(shit1);
    22 
    23         System.out.println(JsonUtils.toJson(list));
    24     }
    25 }

    看下复现的结果:

    1 [{"description":"b","id":2},{"$ref":"$[0]"},{"description":"c","id":3},{"$ref":"$[2]"}]

    list中的对象,只打出了两个。另外两个,都是引用,分别指向了$[0]第一个元素和$[2]第三个元素。

    list中只是存了一个引用,当你用这个引用修改实例的值时,所有值是这个引用的list的元素多会被修改。

  • 相关阅读:
    师弟大喜之日,送上一幅对联 求横批
    漫画:Google 走了
    产品研发流程改进
    Outlook2010 Bug 一则
    Android 手机用户版本比例
    CDMA 短信中心号码
    UIM卡 PIN 码特点
    [Accessibility] Missing contentDescription attribute on image
    java打印函数的调用堆栈
    android中解析Json
  • 原文地址:https://www.cnblogs.com/AaronCui/p/5640001.html
Copyright © 2011-2022 走看看