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

Java中的捕获转换是什么,任何人都可以举个例子吗?

苏凯
2023-03-14
问题内容

我注意到JLS谈论5.1.10捕获转换,但是我不明白它们是什么。

谁能向我解释/举一些例子?


问题答案:

捕获转换旨在使通配符(通用)?有用。

假设我们有以下课程:

public interface Test<T> {
    public void shout(T whatever);
    public T repeatPreviousShout();

}

在我们代码的某个地方,

public static void instantTest(Test<?> test) {
    System.out.println(test.repeatPreviousShout());
}

因为test不是原始值,Test并且因为repeatPreviousShout()在“ hindsight”中返回a
?,所以编译器知道有一个T充当的类型参数Test。这T是针对未知的,T因此编译器会擦除未知类型(对于通配符,它​​将替换为Object),因此repeatPreviousShout()返回Object

但是如果有的话

public static void instantTest2(Test<?> test) {
    test.shout(test.repeatPreviousShout());
}

编译器会给我们类似的错误Test<capture#xxx of ?> cannot be appliedxxx例如,其中有一个数字337)。

这是因为编译器尝试进行类型安全性检查,shout()但是由于接收到通配符,因此它不知道T代表什么,因此创建了一个占位符,称为 Capture
of

从这里开始(Java理论和实践:通用泛滥,第1部分),它明确指出:

捕获转换使编译器可以为捕获的通配符制造一个占位符类型名称,以便类型推断可以将其推断为该类型。

希望对您有帮助。



 类似资料:
  • 本文向大家介绍你了解什么是AOP吗?它的作用是什么?举个例子相关面试题,主要包含被问及你了解什么是AOP吗?它的作用是什么?举个例子时的应答技巧和注意事项,需要的朋友参考一下 AOP是面向切面编程,相对于面向对象编程,面向对象是将需求分为了不同的类并有着自己独立的行为,而面向切面编程就是将通用需求从不同的类不同的行为中提取出来很多个类共享一个功能(比如实例中的输入数据检查),一旦发生变化,修改这个

  • 从Web API 2的模板中,post方法总是这样的: 我不理解这个< code>CreatedAtRoute()方法。有人能给我解释一下吗?

  • 问题内容: 我想根据情况来确定状态字段,但是我得到的是空值。 问题答案: 您的子查询没有关联子句!他们所做的只是查询查询表中是否有任何一行不为null。 如果您对特定状态感兴趣,则必须查询该状态,例如: 但是,我怀疑您对 单个 项目的状态不感兴趣。相反,您想知道一堆行的状态。在这种情况下,将 单个 值存储在变量中将无济于事。您需要将其合并到查询中,并将子查询与外部查询相关联,如下所示(请参见表达式

  • 问题内容: 在最近的项目中,我建议在测试工具代码中捕获RuntimeException并将其记录下来。该代码处理来自数据库的一系列输入,并且我不希望由于任何一个输入(空值,非法参数等)失败而导致测试停止。不用说,我的建议引起了热烈的讨论。 捕获任何一种RuntimeException是否可以接受?如果是,那么可以捕获RuntimeExceptions的其他方案还有哪些? 问题答案: 捕获此异常的原

  • 问题内容: 有效的Java建议我们不要这样做 。总是对的吗? 在许多情况下,仅捕获身体。 如果我不接听电话,如何检查发生的地点? 而且,如果我抓住了但身体空了,那我们那时就无法获得任何堆栈信息,可以吗? 更新 我分析了在Google Android源AOSP4.2.2_r1.2中捕获RuntimeException的统计信息。 有249个RuntimeException捕获,并且以下是catch-

  • 问题内容: 最近,我们在Java服务器应用程序中遇到了一个问题,该应用程序正在抛出未捕获的错误,因为Error是Throwable的一个单独的子类,而我们仅捕获了Exceptions。 我们通过捕获Throwables而不是Exceptions解决了眼前的问题,但这使我思考为什么您要捕获Exceptions而不是Throwables,因为您随后会错过Errors。 那么, 当您可以捕获Throwa