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

Java通用方法:超级不能使用?

夹谷浩宕
2023-03-14
问题内容

所以我有这种方法:

protected void collectSelectedItems(ListSelectionModel lsm, 
         Collection<? super MyItemClass> result) {
    for (int i : GUI.getSelectionIndices(lsm))
    {
        result.add(getItemByDisplayIndex(i));
    }
}

我想返回集合,而不是使用void方法:

protected <T super MyItemClass> Collection<T> 
  collectSelectedItems(ListSelectionModel lsm, Collection<T> result) {
    for (int i : GUI.getSelectionIndices(lsm))
    {
        result.add(getItemByDisplayIndex(i));
    }
    return result;
}

意图做这样的事情(在哪里MyItemClass extends MyItemBaseClass):

List<MyItemBaseClass> list = 
   collectSelectedItems(lsm, new ArrayList<MyItemBaseClass>());

但我在上出现语法错误super

令牌“ super”的语法错误,预期

是什么赋予了?我可以解决这个问题吗?


问题答案:

这是一个解释为什么不允许这样做的链接:

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ107

它基本上只是说在类型参数中使用super“不会买
任何东西”,因为如果允许的话,擦除可能只会将其擦除为
Object,这没有多大意义。



 类似资料:
  • 问题内容: 我希望当子类覆盖父类中的方法时,在该子方法中调用。 有什么办法在编译时检查吗? 如果没有,发生这种情况时,我将如何抛出运行时异常? 问题答案: 无法直接要求这样做。但是,您可以执行以下操作: 这提供了一个内部接口点,子类可以使用该接口将自定义行为添加到public 方法,同时确保无论子类做什么都始终执行超类行为。

  • 问题内容: 是否可以从子静态方法调用超静态方法? 我的意思是,到目前为止,到目前为止,我有以下内容: 并且它可以工作,但是我想以一种通用的方式来做,就像调用super.loadState()一样,这似乎不起作用… 问题答案: 在Java中,静态方法不能被覆盖。原因在这里 得到了很好的解释 因此,它不依赖于被引用的对象。但是,它取决于引用的类型。因此,据说静态方法隐藏了另一个静态方法而不覆盖它。 例

  • 问题内容: 为什么不通用? 好像有 然后,当你不小心尝试从中删除(例如)而不是每个时,这将是编译时错误,而不是以后的调试问题。 问题答案: (Map以及中的)不是通用的,因为你应该能够将任何类型的对象传递给。删除的对象不必与你传递给的对象具有相同的类型;它只要求它们相等。从本说明书中,将删除对象e,使得是true。请注意,没有什么要求,o并且e必须是相同的类型。这是因为该方法接受一个参数,而不仅仅

  • 问题内容: 我到处都看到应通过以下方式调用超类方法的示例: 这样做有什么不利之处吗? 问题答案: 请考虑以下情况: 因此,这些类形成了一个所谓的继承钻石: 运行代码会产生 不好,因为跳过了s 。其原因是因为的调用的直接。 的目的是解决继承钻石。如果您取消评论 和注释掉 该代码产生了更令人满意的结果: 现在,所有方法都被调用。请注意,在当时你定义你可能会 认为 这是与调用,但是你错了。在上述情况下,

  • 问题内容: 这是我的代码- 我想在课堂上嘲笑。但是我找不到解决办法。仅禁止并返回默认值(在上述情况下为0)。事情就是这样,,只对静态方法的工作。 有没有办法在Powermock中做到这一点? 我正在使用Powermock 1.5和Mockito 1.9.5。 问题答案: 看来jMockit可以满足我的需求。也许我可以将这个问题发布到powermock邮件列表中。同时下面就足够了。包learning

  • 问题内容: 因此,我遵循了Python的《超级被认为有害》,并去测试他的例子。 但是,示例1-3应该显示正确的调用方式,当处理期望使用不同参数的方法时,平坦化不起作用。 这是我得到的: 看来它本身违反了文档中提到的最佳实践之一,即使用的方法必须接受和。 现在,很明显,奈特先生希望他的例子能奏效,这在最近的Python版本中是否有所改变?我检查了2.6和2.7,但两者均失败。 那么解决这个问题的正确