我有这样的类结构:
class A1,A2,..,An extends A;
class B1,B2,..,Bn extends B;
将Ai
转换为Bi
的课程:
private B1 convert(A1 a1){}
...
private Bn convert(An an){}
如何使用<? extends B> convert(<? extends A> a)
之类的签名定义单个公共方法?
现在我只有这种方法:
B convert(A a){
if(A.getClass().equals(A1.class)){
return convert((A1)a);
}...
}
如果性能很重要并且频繁调用该方法,我可以使用instanceof吗?
答案 0 :(得分:2)
一个更优雅的解决方案可能是在A
中声明一个方法:[abstract
,如果A
为abstract
}:
public abstract B toB();
重写类(A1,A2,...)必须覆盖它并实例化它们自己的B
对象。
代码捕捉[使用static
修饰符,因为我将其实现为内部类,不需要它,如果类是外部类则不能使用它们:
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 {
}
答案 1 :(得分:0)
public <AType extends A, BType extends B> BType convert(AType a) {...
但你可以有转换器界面,如:
public interface Converter<AType extends A, BType extends B> {
AType convert(BType b);
BType convert(AType a);
}
关于效果问题,您可以查看here