我从编译器得到的错误是“赋值的左侧必须是变量”。我的用例是深度复制,但并不真正相关。
在 C++ 中,可以分配给 *this
。
问题不在于如何规避对 this
的赋值。这很简单,而是不让 this
成为变量的决定背后的基本原理是什么。
原因是技术原因还是概念原因?
到目前为止我的猜测 - 以随机方法重建对象的可能性很容易出错(概念上),但在技术上是可能的。
请避免使用“因为 Java 规范如此规定”的变体。我想知道这个决定的原因。
最佳答案
In C++, one can assign to
*this
是的,但是你不能在 C++ 中执行 this = some
,我实际上认为这更符合你在 Java 方面所询问的内容。
[...] what rationale is there behind the decision not to make
this
a variable.
我想说的是清晰度/可读性。
this
被选为保留字,可能是因为它没有作为显式参数传递给方法。将其用作普通参数并能够为其重新分配新值,会严重扰乱可读性。
事实上,许多人认为,正是出于这个原因,您根本不应该更改参数变量。
Are the reasons technical or conceptual?
我认为主要是概念性的。但会出现一些技术问题。例如,如果您可以为 this
重新分配一个值,则可以将实例变量完全隐藏在局部变量后面。
My guess so far - the possibility of rebuilding an Object in a random method is error-prone (conceptual), but technically possible.
我不确定我是否完全理解这个陈述,但是,是的,容易出错可能是决定将其设为关键字而不是变量的主要原因。
关于java - 为什么java中不允许分配给 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046750/