我读过一些关于定义有界类型参数的文章,比如
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, InterfaceCloneDataClassA和DataClassB都有我需要的两个方法,但是我很难在我的AbstractClass中定义那个逻辑。
现在我有:
AbstractClass < T extends ClassA >我需要像这样的东西
AbstractClass < T extends ClassA or (InterfaceSeq & InterfaceClone) >迁移旧的类以使用ClassA太复杂了。任何建议都是值得感谢的。
发布于 2016-09-06 10:25:48
几个选项
ClassA同时实现InterfaceSeq和InterfaceClone,然后您就可以使用抽象类AbstractClass
表单。
ClassA用法公共类ClassAAdaptor实现InterfaceSeq,InterfaceClone {私有最终T值;ClassAAdaptor(T值){ this.value = value;} @Override public Seq _getSeq() { return value.getSeq();} @Override public ClassAAdaptor clone() { return new ClassAAdaptor(value.clone());}}
AbstractClasses,每种情况一个,每个实现一个接口。接口IAbstractClass { ... }类AbstractClassForInterface< T扩展了InterfaceSeq & InterfaceClone >实现了IAbstractClass { ... }类AbstractClassForClassA< T扩展了ClassA >实现了IAbstractClass { ... }
https://stackoverflow.com/questions/39339730
复制相似问题