微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – isInstance&instanceof – 为什么没有通用方法?

参见英文答案 > instanceof vs isInstance()                                    2个
我了解使用情况&两者的动机 – isinstance是instanceOf的Runtime等价物,但为什么我们有两种方法呢?
为什么我们不能有一个适用于这两种情况的instanceof关键字的通用实现?

例如,这是目前使用的方式:

1)的instanceof

public Collection

2)isinstance

public isinstance(obj)) {
        result.add((T) obj);
      }
    }
    return result;
}

所以,我的问题是为什么我们不能有一个适用于上面第二个例子的instanceof运算符的通用实现如下? (即为什么它不能在运行时解析类型?)

public 
最佳答案
一些背景:

>关键字/语法的实例是Java 1.0(IIRC)中的Java.
> Class.1isinstance方法是在Java 1.1中引入的(根据javadoc).
>在Java 1.5(又名5.0)中引入了泛型,尽管您不需要泛型来使您的示例工作.

instanceof的语法是< expr> ‘instanceof’< type>.为了支持您的建议,他们必须将其更改为< expr> ‘instanceof’< type> | < EXPR取代.这有几个问题:

>它可能会引入语法歧义. (人们必须进行全面分析,以确定是否属于这种情况.)
>它可能会引入语义歧义.问题有点模糊,但类型名称和变量名称位于不同的名称空间中,因此可以同时拥有变量和名为Something的类.如果你这样做,那么obj instanceof Something是指变量还是类?那么obj instanceof Something.class怎么样?

一个问题是,这种“增强”对典型程序员编写正确代码的能力影响不大.基本上,这是一个美容变化.因此,没有真正的理由进行改变.

现在我不知道Java团队是否考虑过这个选项. (你必须问他们!).如果他们这样做,我不知道他们为什么拒绝它.但无论这些问题的答案是什么,Java都不会以这种方式工作……你只需要忍受它.

(如果还有另一个用于Java 9的“项目硬币”,你可以提出这个想法,但坦率地说,我认为它不会得到太多的支持.许多更有价值的想法都未能成功.)

1) By grammatical ambiguity do you mean the grammar would become complicated?as you have shown,it should be possible to write the parsing grammar that way..

不,我的意思是语法可能含糊不清;即,给定的话语可以用两种不同的方式解析,意思是两种不同的东西.然后,您需要一些额外的规则(除语法之外)来整理哪个解析是正确的.

2) If the name resolution in second comment introduces semantic ambiguity,why shouldn’t it be possible to qualify the name with the appropriate namespace(variables or types)

问题是,这是规范编写者指定的所有额外语言复杂性,编译器编写器实现,以及程序员理解.

真正的好处是什么?只是一点语法“优雅”……当你考虑在不同层面发挥作用的特殊规则使它“工作”时,它实际上并不像看起来那么优雅.

原文地址:https://www.jb51.cc/java/438359.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐