当前位置: 首页 > 面试题库 >

getClass()文档中的“删除表达式的静态类型”是什么意思?

奚无尘
2023-03-14
问题内容

Object 的“公共最终Class <?>
getClass()”
方法的文档说:

实际结果类型为Class <?扩展| X |>其中| X | 是擦除在其上调用getClass的表达式的静态类型。例如,此代码段中不需要强制转换:

我不理解解释,尤其是关于| X |的解释。据说是-“删除html" target="_blank">调用getClass的表达式的静态类型”。

| X |是什么形式的符号??也许,| X |还有什么地方?使用类型符号?


问题答案:

Java语言规范要求编译器以特殊方式处理此方法:

该方法getClass返回表示Class对象类的对象。

Class每个引用类型都有一个对象。例如,它可以用于发现类的完全限定名称,其成员,其直接超类以及其实现的任何接口。

getClass的方法调用表达式的类型是Class<? extends |T|>where,其中T是为getClass搜索的类或接口(第15.12.1节)。

因此,getClass的返回类型getClass()是调用表达式的静态(编译时)类型。例如:

String s = "";
Object o = s;
Class<? extends String> sc = s.getClass(); // ok
Class<? extends Object> oc = o.getClass(); // ok
oc = sc; // ok
sc = o.getClass(); // not ok
sc = oc; // not ok

规范中对符号|X|的定义如下:

类型擦除是从类型(可能包括参数化类型和类型变量)到类型(从不参数化类型或类型变量)之间的映射。我们|T|为消除type而写T。擦除映射定义如下:

  • 参数化类型(第4.5节)的擦除G<T1,...,Tn>|G|

  • 嵌套类型的擦除T.C|T|.C

  • 删除数组类型T[]|T|[]

  • 擦除类型变量(第4.4节)是擦除其最左边界。

  • 其他所有类型的擦除都是该类型本身。

例如,如果我们有:

List<String> list = ...;

表达式list.getClass()是类型Class<? extends List>而不是类型Class<? extends List<String>>



 类似资料:
  • 问题内容: 如标题所述,有哪些不同的文档类型?它们的含义是什么?我注意到从切换到IE7时,布局看起来有些不同 至 还有其他的吗?影响或后果是什么? 谢谢! 问题答案: 一个 文档类型 或 文档类型声明 关联与文档 的文档类型定义 。 该 文档类型定义 是一个XML文档的标准。XML和XHTML文档都有许多DTD。XML本身并没有太多的架构或一组非常具体的规则,除了要求一切都必须格式正确。您可以将D

  • 问题内容: 作为Java的初学者,我仍然不确定它的含义。有人精通Java 问题答案: 静态表示标记为此类的变量或方法在类级别可用。换句话说,你无需创建类的实例即可访问它。 因此,与其创建一个Foo实例,然后doStuff像这样调用: 你只需直接针对该类调用该方法,如下所示:

  • 问题内容: Java表达式中的双引号是什么意思? 我有: 有人可以解释这些表达式的计算方式,最后一个的目的是什么? 问题答案: 里面的任何东西都会变成。和+ =。例如 你会得到 在你的问题上 将被评估为:

  • 问题内容: 我在以下正则表达式中找到了它: 它将方括号(及其内容)与嵌套方括号匹配。 问题答案: 是一个字符类,表示除和以外的所有字符。 您可以避免转义和特殊字符,因为它对于PCRE(函数中使用的正则表达式引擎)不是模棱两可的。 由于在PCRE中不正确,因此正则表达式解析的唯一方法是在字符类内部,该字符类稍后将关闭。与以下相同。它不能重新打开字符类内的字符类(POSIX字符类除外)。然后最后一个清

  • 问题内容: 我正在看一些从Java字节码获得的反汇编代码。我看到一些声明如下: 我无法弄清楚什么或平均值。有人可以帮我理解这部分吗? 问题答案: 合成场,(2) 甲 编译器创建的 字段,该字段的本地内部类链接到一个块的局部变量或引用类型参数。 另请参见 或Java中的综合类。

  • 问题内容: 我对以下python表达式很感兴趣: 任务是将2个字典合并为第三个字典,以上表达式可以很好地完成任务。我对运算符及其对表达式的作用很感兴趣。我以为是幂运算符,并且尚未在上面的上下文中看到它。 完整的代码段是这样的: 问题答案: 参数列表中的in有特殊含义,如本教程的4.7节所述。随其传递的字典(或类似字典的)对象被扩展为可调用对象的关键字参数,就像被扩展为单独的位置参数一样。