草庐IT

Immutability

全部标签

java - 如何在java中创建不可变列表?

我需要将可变列表对象转换为不可变列表。java中可能的方式是什么?publicvoidaction(){ListmutableList=Arrays.asList(newMutableClass("san","UK",21),newMutableClass("peter","US",34));ListimmutableList=immutateList(mutableList);}publicListimmutateList(ListmutableList){//somecodeheretomakethisbeanListimmutable//ie.objectsandsizeofbe

java - 如何在java中创建不可变列表?

我需要将可变列表对象转换为不可变列表。java中可能的方式是什么?publicvoidaction(){ListmutableList=Arrays.asList(newMutableClass("san","UK",21),newMutableClass("peter","US",34));ListimmutableList=immutateList(mutableList);}publicListimmutateList(ListmutableList){//somecodeheretomakethisbeanListimmutable//ie.objectsandsizeofbe

java - 如何确定 Java 方法是否修改了作为参数传递的对象

我有C++背景,目前正在学习Java。当我尝试使用一些第三方库时,出现了一个问题。如何确定对将对象引用作为参数的方法的调用是否修改了对象?在C++中,由于使用了const关键字,这一点很清楚。如果方法签名是:voidfoo(Boo&boo);我知道引用的对象可能会被修改,而如果方法签名是:voidfoo(constBoo&boo);编译器保证引用的对象不被修改。我还没有在Java中看到类似的东西,因为只有引用本身可以声明为final,而不是被引用的对象,并且final参数首先没有多大意义,因为它无论如何都是按值传递的。因此,当我看到这样的方法时:voidfoo(Booboo){...}

java - 如何确定 Java 方法是否修改了作为参数传递的对象

我有C++背景,目前正在学习Java。当我尝试使用一些第三方库时,出现了一个问题。如何确定对将对象引用作为参数的方法的调用是否修改了对象?在C++中,由于使用了const关键字,这一点很清楚。如果方法签名是:voidfoo(Boo&boo);我知道引用的对象可能会被修改,而如果方法签名是:voidfoo(constBoo&boo);编译器保证引用的对象不被修改。我还没有在Java中看到类似的东西,因为只有引用本身可以声明为final,而不是被引用的对象,并且final参数首先没有多大意义,因为它无论如何都是按值传递的。因此,当我看到这样的方法时:voidfoo(Booboo){...}

java - Java中不可变对象(immutable对象)的缺点?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭3年前。ImprovethisquestionJava中不可变对象(immutable对象)的优势似乎很明显:一致的状态自动线程安全简单您可以通过使用私有(private)final字段和构造函数注入(inject)来支持不变性。但是,在Java中偏爱不可变对象(immutable对象)有什么缺点?即与ORM或Web演示工具不兼容?设计不灵活?实现复杂性?是否可以设计一个主要使用不可变对象(immutable对象)的大规模系统(深度对

java - Java中不可变对象(immutable对象)的缺点?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭3年前。ImprovethisquestionJava中不可变对象(immutable对象)的优势似乎很明显:一致的状态自动线程安全简单您可以通过使用私有(private)final字段和构造函数注入(inject)来支持不变性。但是,在Java中偏爱不可变对象(immutable对象)有什么缺点?即与ORM或Web演示工具不兼容?设计不灵活?实现复杂性?是否可以设计一个主要使用不可变对象(immutable对象)的大规模系统(深度对

java - 为什么 HashMap 中的不可变对象(immutable对象)如此有效?

所以我读到了HashMap.有人指出:"ImmutabilityalsoallowscachingthehashcodeofdifferentkeyswhichmakestheoverallretrievalprocessveryfastandsuggestthatStringandvariouswrapperclasses(e.g.,Integer)providedbyJavaCollectionAPIareverygoodHashMapkeys."我不太明白……为什么? 最佳答案 String#hashCode:privatei

java - 为什么 HashMap 中的不可变对象(immutable对象)如此有效?

所以我读到了HashMap.有人指出:"ImmutabilityalsoallowscachingthehashcodeofdifferentkeyswhichmakestheoverallretrievalprocessveryfastandsuggestthatStringandvariouswrapperclasses(e.g.,Integer)providedbyJavaCollectionAPIareverygoodHashMapkeys."我不太明白……为什么? 最佳答案 String#hashCode:privatei

java - .clone() 还是 Arrays.copyOf()?

为了减少可变性,我们是否应该使用publicvoidsetValues(String[]newVals){this.vals=(newVals==null?null:newVals.clone());}或publicvoidsetValues(String[]newVals){this.vals=(newVals==null?null:Arrays.copyOf(newVals,newVals.length));} 最佳答案 使用jmh更新Usingjmh,我得到了类似的结果,除了clone似乎稍微好一点。原帖我对性能进行了快速测试

java - .clone() 还是 Arrays.copyOf()?

为了减少可变性,我们是否应该使用publicvoidsetValues(String[]newVals){this.vals=(newVals==null?null:newVals.clone());}或publicvoidsetValues(String[]newVals){this.vals=(newVals==null?null:Arrays.copyOf(newVals,newVals.length));} 最佳答案 使用jmh更新Usingjmh,我得到了类似的结果,除了clone似乎稍微好一点。原帖我对性能进行了快速测试