在 java 中轻松地将可变变量转换为不可变变量
convert mutable variable to immutable in java with less pain
有时我别无选择使用 mutable
变量而不是 immutable
变量我知道有多少种方法可以创建不可变变量,但我想知道这种方法是否也能更正它的真正转换 mutable
到 immutable
并且我不在我的代码中使用 concurrency
或 multithreading
只是好奇?
public class Config implements FindIt {
....
private final class DateHolder{
private final Date dateContainDateObject;
DateHolder(String date) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
dateContainDateObject = dateFormat.parse(date);
}
public Date getDate(){
return dateContainDateObject;
}
}
}
这是嵌套的 class,我用它就像
private DateHolder holder;
并在 Config
构造函数 class 中填充 holder
变量,因此 holder
变量是 ThreadSafe
?
日期是一个可变对象。使其成为最终版本意味着您无法更改对它的引用,但您仍然可以更改引用中的内容(java.util。Date/Calendar 再次出现脏话,切换到 Java 8/Joda如果可以的话时间方式)。
不要向外界公开对 Date 成员的任何引用。相反,制作一份防御性副本并将其传回。您可能会考虑将时间值保存为最终的长实例成员,并仅在需要时实例化 Date。
可以说当你class私有和非静态时是安全的,当你创建表单配置时class你只有一个 DateHolder 。
http://www.javapractices.com/topic/TopicAction.do?Id=29
why is static inner class singleton thread safe
有时我别无选择使用 mutable
变量而不是 immutable
变量我知道有多少种方法可以创建不可变变量,但我想知道这种方法是否也能更正它的真正转换 mutable
到 immutable
并且我不在我的代码中使用 concurrency
或 multithreading
只是好奇?
public class Config implements FindIt {
....
private final class DateHolder{
private final Date dateContainDateObject;
DateHolder(String date) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
dateContainDateObject = dateFormat.parse(date);
}
public Date getDate(){
return dateContainDateObject;
}
}
}
这是嵌套的 class,我用它就像
private DateHolder holder;
并在 Config
构造函数 class 中填充 holder
变量,因此 holder
变量是 ThreadSafe
?
日期是一个可变对象。使其成为最终版本意味着您无法更改对它的引用,但您仍然可以更改引用中的内容(java.util。Date/Calendar 再次出现脏话,切换到 Java 8/Joda如果可以的话时间方式)。
不要向外界公开对 Date 成员的任何引用。相反,制作一份防御性副本并将其传回。您可能会考虑将时间值保存为最终的长实例成员,并仅在需要时实例化 Date。
可以说当你class私有和非静态时是安全的,当你创建表单配置时class你只有一个 DateHolder 。
http://www.javapractices.com/topic/TopicAction.do?Id=29
why is static inner class singleton thread safe