我从编译器得到的错误是“赋值的左边必须是一个变量”。我的用例是深度复制,但并不真正相关。
在 C++ 中,可以赋值给 *this
。
问题不在于如何规避对 this
的赋值。这很简单,但决定不使 this
成为变量的原因是什么。
原因是技术性的还是概念性的?
到目前为止我的猜测 - 以随机方法重建对象的可能性很容易出错(概念上),但在技术上是可能的。
请克制“因为 java 规范这么说”的变体。我想知道这个决定的原因。
最佳答案
In C++, one can assign to
*this
是的,但是您不能在 C++ 中执行 this = something
,我实际上认为这与您在 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/7979623/