当前位置: 首页 > 知识库问答 >
问题:

在java中用泛型向方法传递参数

昌和悦
2023-03-14
public class NavigationTree<T extends BaseListItem<? extends BaseData>> {
    public boolean insert(final T parent, final T child){
    }
}

public class Screen extends BaseData {
}

public class DrawerListItem<T> extends BaseListItem<T>{
}
mCurItems.insert(new DrawerListItem<Screen>(null, null),
                 new DrawerListItem<Screen>(screen.name, screen));

错误:不兼容的类型:DrawerListItem不能转换为Cap#1,其中Cap#1是一个新的类型变量:Cap#1从capture的capture扩展了BaseListItem?扩展基线

我不明白为什么这是错误的。DrawerListItem扩展BaseListItemScreen扩展BaseData。我试着阅读了其他关于泛型类型和类型参数的文章,但它们似乎都没有解决这个问题。

共有1个答案

罗昊空
2023-03-14

我想出了解决办法。在我的DrawerListItem声明中,我将其声明为

public class DrawerListItem<T> extends BaseListItem<T>{
}

而NavigationTree期望:

<T extends BaseListItem<? extends BaseData>>

这实质上意味着:

<DrawerListItem<? extends BaseData>>
 类似资料:
  • 问题总结:我想传递一个带有类型参数(如

  • 问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):

  • 问题内容: 在C#中,我实际上可以这样做: 但是由于某种原因,我无法使其在Java中工作。 我要做的是在超类上创建一个静态方法,以便可以将子类转换为XML。 问题答案: 称为: 或更明确地: 更令人困惑的是,您可以拥有既构造泛型类型又具有泛型参数的构造函数。不记得该语法,也从未在愤怒中使用过它(无论如何,最好还是使用静态创建方法)。 强制转换是不安全的,并且您不能编写T.class。因此,将T.c

  • 安吉丽卡·兰格(Angelica Langer)在关于仿制药的常见问题解答中说(参见Technicalities.FAQ822): 如果这些方法具有具有不同边界的类型参数,则它们不会重写,因为这些方法的签名不是重写等价的。请记住,类型参数边界是泛型方法签名的一部分。 示例(泛型子类型方法重载泛型超类型方法;不推荐): 我不明白为什么方法在类中重载。据我所知,这应该是一个编译时错误,因为在和中具有相

  • 为了实现BrowserStack自动化,我已经将testNG与cucumber集成在一起,我希望在初始化浏览器之前为其设置功能。因此,当我通过testing.xml文件将功能作为参数传递给@before方法时,我会得到以下错误- *io.cucumber.java.invalidMethodSignatureException:用Before、After、BeforeStep或AfterStep注

  • 我写了以下方法 我如何将不同的枚举类型传递给第二个参数?我知道我不能创建枚举的实例,但初始化枚举意味着我将传递一个值,而不是整个初始化的枚举,如下所示...其他枚举也将传递给相同的方法以实现组合细节