草庐IT

Immutability

全部标签

java - 如何避免制作 ByteBuffer 的防御性副本?

我有一个将ByteBuffer作为构造函数参数的类。有没有办法避免制作防御性副本以确保缓冲区在此之后不会被修改?ByteBuffer.isReadOnly()不保证原始所有者不会修改缓冲区。更糟糕的是,似乎没有办法将ByteBuffer子类化。有什么想法吗? 最佳答案 正如您所说,唯一真正的方法是buf.asReadOnlyBuffer(),然后将其传递给构造函数。除了这个之外没有其他选择,尽管您可以将内容复制到一个新的ByteBuffer中,然后传递它。 关于java-如何避免制作By

java - 如何避免制作 ByteBuffer 的防御性副本?

我有一个将ByteBuffer作为构造函数参数的类。有没有办法避免制作防御性副本以确保缓冲区在此之后不会被修改?ByteBuffer.isReadOnly()不保证原始所有者不会修改缓冲区。更糟糕的是,似乎没有办法将ByteBuffer子类化。有什么想法吗? 最佳答案 正如您所说,唯一真正的方法是buf.asReadOnlyBuffer(),然后将其传递给构造函数。除了这个之外没有其他选择,尽管您可以将内容复制到一个新的ByteBuffer中,然后传递它。 关于java-如何避免制作By

java - 如何使用 LinkedList 作为实例字段来管理不可变类?

我有一个名为Employees的不可变类,如下所示:publicfinalclassEmployees{privatefinalListpersons;publicEmployees(){persons=newLinkedList();}publicListgetPersons(){returnpersons;}}如何保持这个类不可变?我将字段private和final设为了,我没有提供setter方法。这足以实现不变性吗? 最佳答案 答案已编辑,不仅解释了可变版本Person的情况,还解释了不可变版本Person的情况。你的类是可

java - 如何使用 LinkedList 作为实例字段来管理不可变类?

我有一个名为Employees的不可变类,如下所示:publicfinalclassEmployees{privatefinalListpersons;publicEmployees(){persons=newLinkedList();}publicListgetPersons(){returnpersons;}}如何保持这个类不可变?我将字段private和final设为了,我没有提供setter方法。这足以实现不变性吗? 最佳答案 答案已编辑,不仅解释了可变版本Person的情况,还解释了不可变版本Person的情况。你的类是可

java - 可变对象和 hashCode

有以下类:publicclassMember{privateintx;privatelongy;privatedoubled;publicMember(intx,longy,doubled){this.x=x;this.y=y;this.d=d;}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+x;result=(int)(prime*result+y);result=(int)(prime*result+Double.doubleToLongBits(d));returnres

java - 可变对象和 hashCode

有以下类:publicclassMember{privateintx;privatelongy;privatedoubled;publicMember(intx,longy,doubled){this.x=x;this.y=y;this.d=d;}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+x;result=(int)(prime*result+y);result=(int)(prime*result+Double.doubleToLongBits(d));returnres

java - 为什么 String 类是不可变的,即使它有一个名为 "hash"的非最终字段

我正在阅读EffectiveJava的第15项约书亚布洛赫。在谈到“最小化可变性”的第15条中,他提到了使对象不可变的五个规则。其中之一是使所有字段最终。这是规则:Makeallfieldsfinal:Thisclearlyexpressesyourintentinamannerthatisenforcedbythesystem.Also,itisnecessarytoensurecorrectbehaviorifareferencetoanewlycreatedinstanceispassedfromonethreadtoanotherwithoutsynchronization,a

java - 为什么 String 类是不可变的,即使它有一个名为 "hash"的非最终字段

我正在阅读EffectiveJava的第15项约书亚布洛赫。在谈到“最小化可变性”的第15条中,他提到了使对象不可变的五个规则。其中之一是使所有字段最终。这是规则:Makeallfieldsfinal:Thisclearlyexpressesyourintentinamannerthatisenforcedbythesystem.Also,itisnecessarytoensurecorrectbehaviorifareferencetoanewlycreatedinstanceispassedfromonethreadtoanotherwithoutsynchronization,a

java - Guava 中是否有对应的不可变枚举映射?

我最近了解了EnumMap在Java中的好处,并想替换现有的ImmutableMap到枚举映射。不过,我也喜欢ImmutableMap提供的不可变属性。guava中是否有变体ImmutableEnumMap可用?在存储方面,哪个(EnumMap与ImmutableMap)性能更好?我找不到两者的比较。如果有人能指出一个链接或就这两种数据结构的效率提供一些见解,我将不胜感激? 最佳答案 Guava贡献者在这里。Guava目前没有ImmutableEnumMap变体,但如果有,它可能只是EnumMap的包装器。(也就是说,更好的不可变实

java - Guava 中是否有对应的不可变枚举映射?

我最近了解了EnumMap在Java中的好处,并想替换现有的ImmutableMap到枚举映射。不过,我也喜欢ImmutableMap提供的不可变属性。guava中是否有变体ImmutableEnumMap可用?在存储方面,哪个(EnumMap与ImmutableMap)性能更好?我找不到两者的比较。如果有人能指出一个链接或就这两种数据结构的效率提供一些见解,我将不胜感激? 最佳答案 Guava贡献者在这里。Guava目前没有ImmutableEnumMap变体,但如果有,它可能只是EnumMap的包装器。(也就是说,更好的不可变实