繁体   English   中英

在Java中将参数传递给具有泛型的方法

[英]passing arguments to method with generics in java

我有以下类和方法的结构:

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从捕获到的扩展BaseListItem? 扩展BaseListItem

我不明白为什么这应该是错误的。 DrawerListItem extends BaseListItemScreen extends BaseData 我尝试阅读其他有关泛型类型和类型参数的文章,但似乎都没有解决这个问题。

尝试这个:

public class Test {
    public static void main(String[] args) throws java.lang.Exception {
        NavigationTree<DrawerListItem<Screen>> nt = new NavigationTree<>();
        nt.insert(new DrawerListItem<Screen>(), new DrawerListItem<Screen>());
    }

    private static class NavigationTree<T extends BaseListItem<? extends BaseData>> {
        public boolean insert(final T parent, final T child) {
            return true;
        }
    }

    private static class DrawerListItem<T> extends BaseListItem<T> {}
    private static class BaseListItem<T> {}
    private static class Screen extends BaseData {}
    private static class BaseData {}
}

我想出了解决方案。 在我的DrawerListItem声明中,我已将其声明为

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

而NavigationTree期望:

<T extends BaseListItem<? extends BaseData>>

实质上意味着:

<DrawerListItem<? extends BaseData>>

在这种情况下。

因此,该错误基本上是说声明的模板类型与所需的模板类型不同,因此是错误。 希望这对其他人有帮助。 谢谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM