[英]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版本中是否可以引入新的关系运算符,使其令牌与标识符冲突?
是的,添加val
和var
的建议之一是它们是特殊类型,而不是关键字,以避免与将其用于变量名的代码冲突。
如果选择了,一种新的语言将使这些关键字成为可能,而为了向后兼容,它们可能是另一种明智的选择。 另外,已经考虑使用final
而不是val
以及transient
而不是var
。
就个人而言,我认为他们应该向他们添加其他语言如何实现一致性,否则您将要让每个新的Java开发人员提出一些基本问题,例如如何比较Java中的字符串? 他们所做的事情是有道理的,但是却使每个新开发人员感到困惑。
相比之下,他们禁止将_
设为lambda变量,以避免与具有特殊含义的其他语言混淆,并且他们警告使用_
作为变量,可能会在将来的版本中将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.