寻求有关java泛型方法的帮助
我有以下的班级结构寻求有关java泛型方法的帮助,java,generics,Java,Generics,我有以下的班级结构 abstract class AbstractA {...} class A1 extends AbstractA {...} class A2 extends AbstractA {...} abstract class AbstractB<T extends AbstractA> { public void handle(T a) { ... } } class B1 extends AbstractB<A1> { public void
abstract class AbstractA {...}
class A1 extends AbstractA {...}
class A2 extends AbstractA {...}
abstract class AbstractB<T extends AbstractA> {
public void handle(T a) { ... }
}
class B1 extends AbstractB<A1> {
public void handle(A1 a) {
super.handle(a);
...
}
}
class B2 extends AbstractB<A2> {
public void handle(A2 a) {
super.handle(a);
...
}
}
抽象类AbstractA{…}
类A1扩展了AbstractA{…}
A2类扩展了AbstractA{…}
抽象类AbstractB{
公共无效句柄(ta){…}
}
类B1扩展了抽象B{
公共无效句柄(A1 a){
超级手柄(a);
...
}
}
类B2扩展了抽象B{
公共无效句柄(A2 a){
超级手柄(a);
...
}
}
现在我想实现一个通用方法,该方法将AbstractB和相关AbstractA的列表作为参数。e、 g
Handler.<B1, A1>handle(listOfB1, A1);
Handler.<B2, A2>handle(listOfB2, A2);
Handler.handle(列表B1,A1);
Handler.handle(列表B2,A2);
及
Handler.handle(列表B1,A2);
Handler.handle(列表B 2,A1);
这是不允许的
我试过了
class Handler {
// public static <T extends AbstractB<K extends AbstractA>, K extends AbstractA> handle(List<T> list, K a) {
public static <T extends AbstractB<? extends AbstractA>, K extends AbstractA> handle(List<T> list, K a) {
for (T tmp : list) {
tmp.handle(a);
}
}
}
类处理程序{
//公共静态句柄(列表,kA){
公共静态将其更改为:
public static <T extends AbstractB<K>, K extends AbstractA> void handle(List<T> list, K a) {
for (T tmp : list) {
tmp.handle(a);
}
}
但是在静态方法的主体中,您不能将A2
实例传递给B1
实例的handle方法,这就是为什么您的代码不能通过编译。因此t的类型界限必须依赖于K
public static <T extends AbstractB<K>, K extends AbstractA> void handle(List<T> list, K a) {
for (T tmp : list) {
tmp.handle(a);
}
}
List<B1> listOfB1;
Handler.<B1, A2>handle(listOfB1, A2);