Java泛型:绑定类扩展类OR 2接口

时间:2016-09-06 02:21:43

标签: java generics

我已经完成了一些关于定义有界类型参数的阅读,比如

abstract class AbstractClass < T extends ClassA >

abstract class AbstractClass < T extends InterfaceSeq & InterfaceClone >

我的问题如下。我的AbstractClass需要访问以下方法的数据对象(T):

getSeq() - gets sequence number of data object

_clone() - additional cloning logic of the data object

这两种方法都存在于ClassA下。问题是,ClassA是在两年前推出的。

有一些旧数据类实现InterfaceSeq(包含getSeq())和InterfaceClone(包含_clone()):

 DataClassA extends ClassA

 DataClassB implements InterfaceSeq, InterfaceClone

DataClassA&amp; DataClassB有我需要的两种方法,但我很难在AbstractClass中定义逻辑。

现在我有:

AbstractClass < T extends ClassA >

我需要像

这样的东西
AbstractClass < T extends ClassA or (InterfaceSeq & InterfaceClone) >

将旧类迁移到使用ClassA过于复杂。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:3)

一些选项

  1. 只需让ClassA同时实施InterfaceSeqInterfaceClone,然后就可以使用

    abstract class AbstractClass < T extends InterfaceSeq & InterfaceClone >
    

    形式。

  2. 在适配器中包装所有ClassA用法

    public class ClassAAdaptor<T extends ClassA> implements InterfaceSeq, InterfaceClone {
        private final T value;
        ClassAAdaptor(T value) {
           this.value = value;
        }
        @Override public Seq _getSeq() { return value.getSeq(); }
        @Override public ClassAAdaptor<T> clone() { return new ClassAAdaptor(value.clone()); }
    }
    
  3. 为每种情况制作两个不同的AbstractClass es,每个工具都是一个接口。

    interface IAbstractClass { ... }
    class AbstractClassForInterface< T extends InterfaceSeq & InterfaceClone > implements IAbstractClass { ... }
    class AbstractClassForClassA< T extends ClassA > implements IAbstractClass { ... }
    
相关问题