繁体   English   中英

为什么instanceof是关键字?

[英]Why is instanceof a keyword?

如果Java允许将“ instanceof”作为变量(以及字段,类型名称,程序包名称)的名称,那么乍一看似乎该语言仍将保持明确。

在Java的大多数或所有产品中,可能会出现Identifier地方,都有上下文提示,可以防止与二进制运算符混淆。

关于基本生产:

RelationalExpression:
  ...
  RelationalExpression instanceof ReferenceType

没有任何形式为RelationalExpression Identifier ReferenceType表达式,因为将单个Identifier附加到任何Expression都是无效的,并且不能通过在前面添加Identifier来扩展ReferenceType

我能想到为什么instanceof 必须是关键字的唯一其他原因是,如果还有其他包含Identifier产品可以分解为instanceof表达式。 也就是说,如果我们允许instanceof作为Identifier ,则可能会产生不确定的结果。 但是,我似乎找不到任何东西,因为Identifier几乎总是与其周围的标记之间用点分隔(或通过后面的lparen标识为MethodName )。

关键字instanceof只是不是过时的,而不是必然的? 将来的Java版本中是否可以引入新的关系运算符,使其令牌与标识符冲突? (例如,是否可以在不将其假设为关键字的情况下引入假设的“与”相关的运算符,这会破坏现有代码?)

这个问题是不同的,它在问为什么“ instanceof”不是一种方法,我在问语法上是否有原因

您的观点是它可能是Object上的方法,或者我们有

if (myClass.class.isInstance(obj))

这比较麻烦,但是我要说的是, instanceof链并不被认为是最佳实践,并且使其更难一点也不是一个坏主意。

值得注意的是,Java的早期版本没有像现在那样使用内在函数,并且使用方法的效率要比本地关键字低得多,尽管我不认为今天必须如此。

关键字instanceof只是不是过时的,而不是必然的?

恕我直言,关键字被认为是使具有特殊含义的单词具有并仅具有特殊目的的突出做法。

将来的Java版本中是否可以引入新的关系运算符,使其令牌与标识符冲突?

是的,添加valvar的建议之一是它们是特殊类型,而不是关键字,以避免与将其用于变量名的代码冲突。

如果选择了,一种新的语言将使这些关键字成为可能,而为了向后兼容,它们可能是另一种明智的选择。 另外,已经考虑使用final而不是val以及transient而不是var

就个人而言,我认为他们应该向他们添加其他语言如何实现一致性,否则您将要让每个新的Java开发人员提出一些基本问题,例如如何比较Java中的字符串? 他们所做的事情是有道理的,但是却使每个新开发人员感到困惑。

相比之下,他们禁止将_设为lambda变量,以避免与具有特殊含义的其他语言混淆,并且他们警告使用_作为变量,可能会在将来的版本中将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM