0

我有这样的类结构:

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 吗?

4

2 回答 2

2

一个更优雅的解决方案可能是在A: [preferably abstract, if Ais 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 { 

}
于 2012-07-17T09:41:32.270 回答
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);

}

关于性能问题,你可以看看这里

于 2012-07-17T09:18:07.693 回答