在 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));
编译器抛出以下错误:
Error: incompatible types: DrawerListItem cannot be converted to CAP#1 where CAP#1 is a fresh type-variable:CAP#1 extends BaseListItem from capture of ? extends BaseListItem
我不明白为什么这是错误的。 DrawerListItem extends BaseListItem
和 Screen extends BaseData
。我已经尝试阅读有关泛型类型和类型参数的其他帖子,但其中 none 似乎解决了这个问题。
试试这个:
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>>
在这种情况下。
因此错误基本上是说声明的模板类型与所需的模板类型不同,因此出现错误。
希望这可以帮助别人。
感谢大家的帮助!
我有以下类结构和方法:
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));
编译器抛出以下错误:
Error: incompatible types: DrawerListItem cannot be converted to CAP#1 where CAP#1 is a fresh type-variable:CAP#1 extends BaseListItem from capture of ? extends BaseListItem
我不明白为什么这是错误的。 DrawerListItem extends BaseListItem
和 Screen extends BaseData
。我已经尝试阅读有关泛型类型和类型参数的其他帖子,但其中 none 似乎解决了这个问题。
试试这个:
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>>
在这种情况下。
因此错误基本上是说声明的模板类型与所需的模板类型不同,因此出现错误。 希望这可以帮助别人。 感谢大家的帮助!