Java泛型类型';推断
我的班级结构如下:Java泛型类型';推断,java,generics,Java,Generics,我的班级结构如下: class A1,A2,..,An extends A; class B1,B2,..,Bn extends B; 以及将Ai转换为Bi的类: private B1 convert(A1 a1){} ... private Bn convert(An an){} 如何定义带有签名的单个公共方法,如,您可以执行以下操作: public <AType extends A, BType extends B> BType convert(AType a
class A1,A2,..,An extends A;
class B1,B2,..,Bn extends B;
以及将Ai
转换为Bi
的类:
private B1 convert(A1 a1){}
...
private Bn convert(An an){}
如何定义带有签名的单个公共方法,如
,您可以执行以下操作:
public <AType extends A, BType extends B> BType convert(AType a) {...
public一个更优雅的解决方案可能是在A
中声明一个方法:[如果A
是抽象的,最好是abstract
:
public abstract B toB();
重写类(A1,A2,…)必须重写它并实例化它们自己的B
对象
代码捕捉[使用静态
修饰符,因为我将其实现为一个内部类,不需要它,如果类是外部类,则不能使用它]:
public abstract static class A {
public abstract B toB();
}
public static class A1 extends A {
@Override
public B1 toB() {
return new B1();
}
}
public static class B {
}
public static class B1 extends B {
}
只是一个想法:我认为一个更优雅的解决方案是在a
中声明一个方法[最好是抽象的,如果a
是抽象的]:public B toB()
,它将从调用方创建一个B
实例。非常简单!非常感谢。为什么我没有考虑它?因为它似乎对你有帮助,我添加了一个代码快照作为答案。很高兴我能帮忙。
public abstract B toB();
public abstract static class A {
public abstract B toB();
}
public static class A1 extends A {
@Override
public B1 toB() {
return new B1();
}
}
public static class B {
}
public static class B1 extends B {
}