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的元素多会被修改。

时间: 2024-10-06 14:44:55

List元素为泛型时的注意事项的相关文章

局部变量与全局变量在声明时的注意事项

/* ============================================================================ Name : TestVariable.c Author : lf Version : Copyright : Your copyright notice Description : 局部变量与全局变量在声明时的注意事项 全局变量只能要常量赋值,但是局部变量可用常量和表达式以及函数赋值. 这是为什么呢? 程序在开始执行时需要用适当的值来初

使用MySQL-Proxy读写分离时的注意事项

在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSyncReplicationDesign补丁. 端口问题 MySQL-Proxy缺省使用的是4040端口,如果你想透明的把3306端口的请求转发给4040的话,那么可以: iptables -t nat -I PREROUTING -s ! 127.0.0.1 -p tcp --dport 3306 -j

页面重构时的注意事项

页面重构时的注意事项 1. 重构页面时,什么样的代码才算是好的代码? 2. 重构时如何告诉设计师,他设计的东西太丑? 1. 重构页面时,什么样的代码才算是好的代码? 这个我感觉要从三方面来做答,基础的就不说了,那些语义化,结构化,兼容性等等方面的问题.说说中级部分的: 页面的健壮性: 这个怎么说呢,按我的理解,UI出的psd图是一个页面理想状态下的形态,而真实上线后,会出现三种极端状态,一,数据极多,二,数据极少,三,数据刚好(其实就是PSD设置描述的一个状态).所以在页面排版的时候,考虑这设计

table 元素设置relative时,在ie\firefox下背景颜色会覆盖边框

table 元素设置relative时,在ie\firefox下背景颜色会覆盖边框,解决办法: http://my.oschina.net/u/1540190/blog/295600 不是老外多厉害,而是自己没有理解透彻html属性,遇到问题时不知道从哪下手了,上网搜索解决办法是提倡的,效率高.但搜索到答案时要学会思考,自己无法解决的原因在哪,总结一下,下次自己可能就会处理了~

给电脑系统备份时的注意事项

给电脑系统备份时的注意事项 当你的电脑随着使用时间变长,由于各类程序的安装,或许会出现各式各样的系统问题,如系统经常崩溃,病毒突然来袭等等.给电脑系统备份是必然的一个选择.那么在进行系统备份之前我们应该注意哪些事项呢? 首先如果你选择系统自带的备份工具,那么请确定你自己完全能够自行操作,以免误操作导致电脑不能使用. 可以对你的系统盘(C盘)里面的垃圾文件进行简单清理(可以去网上查下那些C盘文件是可以进行清理的),这样备份出来的镜像文件会更小,备份时间也不会那么长. 建议备份系统的时候最好是你重新

[转载]C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素

//防止页面多次刷新页面执行 if (num == 1) { string GetUserName = System.Configuration.ConfigurationSettings.AppSettings["Y2000UserName"].ToString(); string GetUserPassword = System.Configuration.ConfigurationSettings.AppSettings["Y2000UserPassword"

SSH框架整合jar包时的注意事项

SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候javassit的jar出现了两个不同版本的,需要把低版本的删除掉. 原文地址:https://www.cnblogs.com/wyhluckdog/p/10139375.html

修改NSMutableArray中的元素时的注意事项

最近做项目遇到从文件加载数组,并对数组中的元素进行操作的问题,特意写了个Demo,记录下要注意的东西: 代码如下: NSArray *array = @[@"1", @"2", @"3"]; NSMutableArray *marray = [[NSMutableArray alloc] initWithArray:array]; NSString *temp = [marray objectAtIndex:1]; temp = @"2

1.node.js在遇到“循环+异步”时的注意事项

原文:https://blog.csdn.net/fangjian1204/article/details/50585073 自从使用Node.js以来,一直困扰着我的就是异步了.老是碰到一些,不按照代码书写顺序运行的情况,虽然网上的信息很多.但是找到能浅显易懂的很少.这里就找到一篇关于循环+异步的处理防范的案列.供大家参考. nodejs的特征 nodejs的最大特征就是一切都是基于事件的,从而导致一切都是异步的.nodejs的速度为什么快,其原理和nginx一样,他们都是通过事件回调来处理请