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

标签 java reference this variable-assignment

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

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

相关文章:

c++ - 引用与设置局部变量

java - MATLAB Java 引用问题

java - BPEL编译错误: undeclared variable

java - 如何在 Spring MVC 中定义基于 url 扩展的消息转换器?

c++ - C++ 中的指针与引用

javascript - 原型(prototype) 'this' 不指向对象

javascript - 如何在回调中访问正确的“this”?

c++ - 构造函数初始化列表中的 'this'指针

java - 如果我调用一个接口(interface)方法,它会从实现类中获取方法体并执行吗?

java - 在 GWT super 开发模式下调试?