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

为什么SomeClass 不等于SomeClass 在Java通用类型中?

令狐珂
2023-03-14
问题内容

我注意到了Collections.sort的规格:

public static <T> void sort(List<T> list, Comparator<? super T> c)

为什么? super这里需要“ ”?如果是ClassBextend ClassA,那么我们是否不能保证a
Comparator<ClassA>仍然能够比较两个ClassB对象而没有“ ? super”部分?

换句话说,给出以下代码:

List<ClassB> list = . . . ;
Comparator<ClassA> comp = . . . ;
Collections.sort(list, comp);

为什么即使不? super为Collections.sort()的声明指定“ ”,编译器也不足够聪明地知道这是可以的?


问题答案:

Josh Bloch今年在Google I / O上做了一个名为“
有效Java重新加载”的演讲,您可能会发现它很有趣。它讨论了一个称为“
Pecs”(生产者extends,消费者super)的助记符,该助记符解释了为什么在输入参数中使用? extends T? super T参数(仅;从不用于返回类型),以及何时使用该参数。



 类似资料:
  • 问题内容: 我目前正在一个主要是Objective-C的项目中编写一些Swift代码。在我们的ObjC代码中,我们有一个声明为的标头。然后,我们可以声明一个@property,它只能是实现的子类。 (注意:并且不是我定义的;它们是GPUImage库的一部分) 即使标头是在导入的标头中#import的,我们的Swift代码似乎也无法识别这一点。我试图在Swift中复制声明,但是这些都不是正确的语法:

  • 问题内容: 我在XPages应用程序中偶尔遇到异常: 提到的两个类是相同的,它是用作会话bean的类。我无法用Google搜索涵盖我的问题的任何内容。通常的解释是设计元素的变化,而不是我的情况。 从那时起,XPage应用程序变得不可用(使用会话bean someClass的页面),直到重新启动http任务或重新保存faces-config.xml。 在某些情况下,这与其他异常有关: 这种行为的背后

  • 问题内容: 请帮助我获得一个where 本身就是一个泛型类型。如我现在所见,Spring RestTemplate现在不支持此功能。我正在使用Spring MVC版本3.1.2 这是我要使用的代码:代码: 我收到此错误: 这是明显的错误,但是今天如何解决呢? 比我想得到我的通用响应类型: 现在,我使用此解决方案,并且不使用: 问题答案: 这是一个已知问题。现在,通过引入修复了此问题,您可以显式 继

  • 问题内容: 这样的方法声明有什么区别: 还有这个: 我的看法是,他们两个都指定传入的对象 必须 是type的子类,那么在这种情况下为什么还要烦恼泛型呢? 问题答案: 在您的情况下,差别不大。 但是请考虑以下几点: 在这种情况下,您可以通过以下方式调用该方法: 如果您使用 您将只能执行以下操作:

  • 但我得到了这个: 我的榜样。 我在一个模型中有两个类: ***数据库中的firstName和lastName为空。 当firstName和lastName为null时,ModelMapper将my ClientDto设置为null。 映射后OrderDto的输出:“OrderDto(ordernumber=123,ordersize=10cm,orderdescription=some order

  • 问题内容: 有没有办法为通用模板指定默认类型? 假设我有一堂课。猴子可以生活在不同的,例如或: 有没有一种方法可以为指定默认值,所以我可以使用类型而不是没有得到编译器警告? 编辑 换句话说,是否有一种方法可以摆脱“原始类型”警告而不必明确地禁止它呢? 问题答案: 不,你不能那样做。通用参数没有默认值。您可以重新组织类型层次结构,以便有一个GenericMonkey和一个DefaultMonkey可