java - 为什么在 java 中不允许分配到 'this'?

标签 java reference this variable-assignment

我从编译器得到的错误是“赋值的左边必须是一个变量”。我的用例是深度复制,但并不真正相关。

在 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/

相关文章:

java - 如何读取jar文件中的jrxml文件?

java - ListFragment 内的自定义 ListView

java - SMPP 错误 13 - ESME_RBINDFAIL

c++ - 常量引用的文字初始化

c++ - &* 用于原始指针、迭代器和 ... std::nullptr_t

java - Java中有 "this"的名称吗?

java - tomcat 7.0.56 windows (eclipse) 尾部附加斜杠; tomcat 7.0.28 linux(已部署的 war )未附加尾部斜杠

c++ - 初始化头文件中的引用 C++

Javascript Function.prototype.call() 传递原始值

Java 这个(空)