草庐IT

Immutable

全部标签

java - 具有非最终字段的不可变对象(immutable对象)如何成为线程不安全的?

假设我们有这个//Thisistriviallyimmutable.publicclassFoo{privateStringbar;publicFoo(Stringbar){this.bar=bar;}publicStringgetBar(){returnbar;}}是什么让这个线程不安全?继此question. 最佳答案 Foo在安全发布后是线程安全的。例如,这个程序可以打印“不安全”(它可能不会使用热点/x86的组合)——如果你将bar设置为final,它就不会发生:publicclassUnsafePublication{st

java - Java 会优化不可变对象(immutable对象)吗?

Java字符串是不可变的,用相同的值实例化多个字符串返回相同的对象指针。(对此有一个术语吗?“池化”似乎很合适,但这已经指的是进行缓存以通过减少实例化来节省时间。)Java是否也对其他不可变的(用户定义的)类执行此操作(没有术语)?Java甚至可以检测到一个类是不可变的,或者这是字符串类所独有的东西? 最佳答案 写信。字符串,你要找的词是interning.Java不会为您自己的不可变对象(immutable对象)执行此操作。不过,它确实有盒装原语的缓存版本。请参阅wrapperclasscaching上的这篇文章了解更多信息。

java - 不可变对象(immutable对象)的 Hibernate CompositeUserType

我正在hibernate中创建一个CompositeUserType以将EAST和NORTH字段映射到坐标对象。目前,我的Coordinate对象是不可变的,如果可能的话,我希望保持这种状态。我已经编写了我的nullSafeGet,从ResultSet中提取坐标并调用构造函数:@OverridepublicObjectnullSafeGet(ResultSetrs,String[]names,SessionImplementorsession,Objectowner)throwsHibernateException,SQLException{Integereasting=(Intege

java - 如何将 java.lang.ClassCastException : cannot assign instance of scala. collection.immutable.List 修复为字段类型 scala.collection.Seq?

这个错误是最难追踪的。我不确定发生了什么。我在我的位置机器上运行一个Spark集群。所以整个spark集群都在一个主机下,它是127.0.0.1并且我在独立模式下运行JavaPairRDD>cassandraRowsRDD=javaFunctions(sc).cassandraTable("test","hello").select("rowkey","col1","col2","col3",).spanBy(newFunction(){@Overridepublicbyte[]call(CassandraRowv1){returnv1.getBytes("rowkey").array

java - Java 中小型不可变对象(immutable对象)的缓存策略?

我正在开发一个应用程序,它可以创建大量不可变的小Java对象。一个例子可能是:publicclassPoint{finalintx;finalinty;finalintz;.....}许多Point实例可能需要引用相同的(x,y,z)位置。在应用程序的生命周期中尝试缓存和重用此类对象在多大程度上有意义?有什么特殊的技巧来处理这种情况? 最佳答案 当它成为一个问题时。否则,您只是在创建无用的抽象层。无论哪种方式,您都可以使用PointFactory轻松实现这一点,调用它来获取Point,对于任何给定的x、y和z。但是你必须管理何时应该

java - 有效不可变对象(immutable对象)

我想确保我根据Java内存模型正确理解了“有效不可变对象(immutable对象)”的行为。假设我们有一个可变类,我们希望将其发布为有效的不可变类:classOutworld{//ThisMAYbeaccessedbymultiplethreadspublicstaticvolatileMutableLongpublished;}//ThisclassismutableclassMutableLong{privatelongvalue;publicMutableLong(longvalue){this.value=value;}publicvoidincrement(){value++

ios - 发送到不可变对象(immutable对象)的变异方法'

我正在尝试从字典中将对象添加到数组中。在其他部分我收到此错误mutatingmethodsenttoimmutableobject'NSMutableDictionary*selectedDict=[NSMutableDictionarynew];[selectedDictsetObject:editedLineItemforKey:@"Text"];[selectedDictsetObject:@"fa-check"forKey:@"IconClass"];NSMutableArray*tagListDictionary=[NSMutableArraynew];[tagListDic

objective-c - 自动释放方法泄漏

大家好,这些天我被一些内存泄漏问题困住了。我正在制作的应用程序是这样工作的:1-将文件载入内存2-根据在该文件上读取的一些值创建一个屏幕3-显示View从现在开始,当我启动应用程序并获得第一个屏幕时一切正常。没有泄漏。但是当我想从当前View加载另一个屏幕时,我从自动释放的对象中得到了很多泄漏。我不明白,因为当我从当前View加载新View时,过程是相似的:1-当前View的描述2-将文件载入内存3-根据在该文件上读取的一些值创建一个屏幕4-显示View这里有一些泄漏的具体例子:-(NSString*)pathForApplicationName:(NSString*)appNamew

ios - 发送到不可变对象(immutable对象)的变异方法,只发生在物理设备上

我已经尝试了我能想到的所有方法,以及为修复此错误而给出的所有建议。该应用程序在iOS模拟器上运行良好,但在物理设备(我的iPhone5)上崩溃了。这是我得到的错误:2015-01-2316:26:43.232Kyle'sApp[2343:773183]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'-[__NSCFDictionarysetObject:forKey:]:mutatingmethodsenttoimmutableobject'该类的属性声明有:@prope

ios - 核心数据崩溃不可变对象(immutable对象)

为什么会崩溃?CategoryOfExpense*newCatEx=(CategoryOfExpense*)[NSEntityDescriptionentityForName:kCategoryOfExpenseinManagedObjectContext:moc];newCatEx.name=self.nameTextField.text;错误是:***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'Can'tmodifyanimmutablemodel.'