如果Java允许" instanceof"作为变量(以及字段,类型名称,包名称)的名称,乍一看,该语言仍将保持明确。
在Java中可能出现Identifier
的大部分或全部作品中,都有上下文提示可以防止与二元运算符混淆。
关于基本生产:
RelationalExpression:
...
RelationalExpression instanceof ReferenceType
表单RelationalExpression Identifier ReferenceType
没有表达式,因为向任何Identifier
添加单个Expression
永远无效,并且可以通过添加{{{}}}来扩展ReferenceType
{1}}在前面。
我能想到为什么必须成为关键字的唯一原因是,如果有一些其他的包含Identifier
的产品可以分解为一个instanceof表达式。也就是说,如果我们允许instanceof为Identifier
,则可能会产生含糊不清的作品。但是,我似乎无法找到任何内容,因为Identifier
几乎总是通过一个点与其周围的标记分开(或者通过后续的lparen可以识别为Identifier
)。
关键字的实例是否仅仅是出于传统而非必要性?是否可以在未来的Java版本中引入新的关系运算符,其标记与标识符冲突? (例如,是否可以引入假设的"相关的"运算符,而不会使其成为关键字,这会破坏现有代码?)
答案 0 :(得分:2)
这个问题不同,它问为什么" instanceof"不是一种方法,我在询问是否存在语法上的原因
你有一个观点,它可能是Object上的方法,或者我们有
if (myClass.class.isInstance(obj))
这更麻烦,但是我会说instanceof
的链条不被认为是最佳做法,并且使它变得更难有点可能并不是一个坏主意。
值得注意的是,早期版本的Java并没有像现在这样使用内在函数,并且使用某种方法的效率远远低于本机关键字,但我不相信必须在今天成真。
关键字的实例仅仅是出于传统而非必要性吗?
恕我直言关键词被认为是一种良好的做法,可以使具有特殊含义的词语具有特殊目的,并且只有特殊用途。
在未来的Java版本中是否会引入新的关系运算符,其标记会与标识符冲突?
是的,添加val
和var
的提议之一是它们是特殊类型,而不是关键字,以避免与将它们用于变量名称的代码冲突。
鉴于选择,一种新语言会生成这些关键字,而且只是为了向后兼容,它们可能是另一种选择。或者,我们考虑使用final
而不是val
和transient
而不是var
。
就我个人而言,我认为他们应该添加其他语言如何保持一致性,否则你会让每个新的Java开发人员都提出基本的问题,例如How do I compare strings in Java?他们所做的事情是有道理的,但它让每个新开发者都感到困惑。
相比之下,他们禁止将_
变成一个lambda变量,以避免与其他具有特殊含义的语言混淆,并且他们会警告如何使用_
作为变量将其删除。未来的版本。