Jef*_*iao 1 java date immutability guava
如何使用guava创建一个不可变的日期列表(java.util.Date)?
我有这个片段:
Date date = new GregorianCalendar(2014, 4, 1).getTime();
// doesn't work:
// List<Date> immutableList = ImmutableList.of(date);
// doesn't work either:
List<Date> immutableList = ImmutableList.copyOf(new Date[] { date });
date.setMonth(3);
System.out.println("immutableList has: " + immutableList.get(0));
Run Code Online (Sandbox Code Playgroud)
而我想让它成为一个"真正的"不可变列表,以便在更改date对象时不会更改第0个元素.
正如您已经发现的那样,使用不可变列表可以保护列表不被修改,但不会保护列表中包含的元素.为此,元素本身必须是不可变的.
不幸的是,不可能创建不可变java.util.Date对象.您可以考虑几种方法:
java.util.Date是可变的,但类型的对象java.lang.Long是不可变的.Long对象列表来存储long从调用中获取的值Date.getTime(),并Date(long date)在从列表中检索时使用构造函数动态构造新的日期对象.