草庐IT

immutability-helper

全部标签

java - 为什么继续对不可变对象(immutable对象)使用 getter?

使用不可变对象(immutable对象)已变得越来越普遍,即使手头的程序从未打算并行运行。然而我们仍然使用getter,每个字段需要3行样板代码,每次访问需要5个额外字符(使用您最喜欢的主流OO语言)。虽然这看起来微不足道,而且许多编辑器无论如何都减轻了程序员的大部分负担,但这似乎仍然是不必要的努力。继续使用访问器而不是直接访问不可变对象(immutable对象)的原因是什么?具体来说,强制用户使用访问器(对于客户端或库编写器)有什么好处,如果是,它们是什么?请注意,我指的是不可变对象,与question不同,它指的是一般的对象。需要明确的是,不可变对象(immutable对象)没有s

java - 为什么继续对不可变对象(immutable对象)使用 getter?

使用不可变对象(immutable对象)已变得越来越普遍,即使手头的程序从未打算并行运行。然而我们仍然使用getter,每个字段需要3行样板代码,每次访问需要5个额外字符(使用您最喜欢的主流OO语言)。虽然这看起来微不足道,而且许多编辑器无论如何都减轻了程序员的大部分负担,但这似乎仍然是不必要的努力。继续使用访问器而不是直接访问不可变对象(immutable对象)的原因是什么?具体来说,强制用户使用访问器(对于客户端或库编写器)有什么好处,如果是,它们是什么?请注意,我指的是不可变对象,与question不同,它指的是一般的对象。需要明确的是,不可变对象(immutable对象)没有s

python - pycharm 在启动时总是 "uploading pycharm helpers"到同一个远程 python 解释器

当我为远程python解释器启动PyCharm时,它总是执行“上传PyCharm助手”,即使远程机器IP相同并且已经包含以前上传的助手。行为是否正确? 最佳答案 这是一个众所周知的问题,可能会成为生产力的主要障碍,尤其是当您在工作流程中使用一次性实例时。每次您想连接到远程系统时,它都会导致强制休息20分钟。NotAcceptable。似乎PyCharm在远程助手文件夹中创建了一个build.txt文件,其中仅包含当前PyCharm内部版本号作为其内容,例如:PY-171.4694.38因此可以通过在/Applications/PyC

python - pycharm 在启动时总是 "uploading pycharm helpers"到同一个远程 python 解释器

当我为远程python解释器启动PyCharm时,它总是执行“上传PyCharm助手”,即使远程机器IP相同并且已经包含以前上传的助手。行为是否正确? 最佳答案 这是一个众所周知的问题,可能会成为生产力的主要障碍,尤其是当您在工作流程中使用一次性实例时。每次您想连接到远程系统时,它都会导致强制休息20分钟。NotAcceptable。似乎PyCharm在远程助手文件夹中创建了一个build.txt文件,其中仅包含当前PyCharm内部版本号作为其内容,例如:PY-171.4694.38因此可以通过在/Applications/PyC

java - 具有 ArrayList 成员变量的不可变对象(immutable对象) - 为什么可以更改此变量?

我有一个包含各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。事实上,这个对象应该是不可变的。publicclassExample{privateArrayListlist;}现在我注意到以下情况:当我使用getter方法获取变量列表时,我可以添加新值等等-我可以更改ArrayList。当我下次为此变量调用get()时,将返回更改后的ArrayList。怎么会这样?我没有再设置它,我只是在努力!使用String这种行为是不可能的。那么这里有什么区别呢? 最佳答案 仅仅因为对列表的引用是不可变的并不意味着它

java - 具有 ArrayList 成员变量的不可变对象(immutable对象) - 为什么可以更改此变量?

我有一个包含各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。事实上,这个对象应该是不可变的。publicclassExample{privateArrayListlist;}现在我注意到以下情况:当我使用getter方法获取变量列表时,我可以添加新值等等-我可以更改ArrayList。当我下次为此变量调用get()时,将返回更改后的ArrayList。怎么会这样?我没有再设置它,我只是在努力!使用String这种行为是不可能的。那么这里有什么区别呢? 最佳答案 仅仅因为对列表的引用是不可变的并不意味着它

java - 不可变对象(immutable对象)是线程安全的,但为什么呢?

例如,一个线程通过创建它的对象来创建和填充不可变类的引用变量,另一个线程在第一个线程完成之前启动并创建不可变类的另一个对象,不可变类不会使用是线程不安全的吗?创建不可变对象(immutable对象)也意味着所有字段都必须标记为final。itmaybenecessarytoensurecorrectbehaviorifareferencetoanewlycreatedinstanceispassedfromonethreadtoanotherwithoutsynchronization他们是否想说其他线程可能会将引用变量重新指向不可变类的其他对象,这样线程将指向不同的对象而导致状态不一

java - 不可变对象(immutable对象)是线程安全的,但为什么呢?

例如,一个线程通过创建它的对象来创建和填充不可变类的引用变量,另一个线程在第一个线程完成之前启动并创建不可变类的另一个对象,不可变类不会使用是线程不安全的吗?创建不可变对象(immutable对象)也意味着所有字段都必须标记为final。itmaybenecessarytoensurecorrectbehaviorifareferencetoanewlycreatedinstanceispassedfromonethreadtoanotherwithoutsynchronization他们是否想说其他线程可能会将引用变量重新指向不可变类的其他对象,这样线程将指向不同的对象而导致状态不一

java - 所有原始包装类都是不可变对象(immutable对象)吗?

Java中的所有原始包装类都是不可变对象(immutable对象)吗?字符串是不可变的。其他不可变对象(immutable对象)是什么? 最佳答案 任何不给您任何方法来更改其中数据的类型都是不可变的-就这么简单。是的,所有原始包装器类型都是不可变的1,String也是如此。UUID,URL和URI是其他例子。虽然内置JavaAPI中的Calendar和Date是可变的,但JodaTime中的许多类型是不可变的-在我看来,这是JodaTime更易于使用的一个原因。如果一个对象是不可变的,您可以在代码中的其他位置保留对它的引用,而不必担

java - 所有原始包装类都是不可变对象(immutable对象)吗?

Java中的所有原始包装类都是不可变对象(immutable对象)吗?字符串是不可变的。其他不可变对象(immutable对象)是什么? 最佳答案 任何不给您任何方法来更改其中数据的类型都是不可变的-就这么简单。是的,所有原始包装器类型都是不可变的1,String也是如此。UUID,URL和URI是其他例子。虽然内置JavaAPI中的Calendar和Date是可变的,但JodaTime中的许多类型是不可变的-在我看来,这是JodaTime更易于使用的一个原因。如果一个对象是不可变的,您可以在代码中的其他位置保留对它的引用,而不必担