首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java泛型:绑定类扩展类OR 2接口

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

Stack Overflow用户
提问于 2016-09-06 10:21:43
回答 1查看 44关注 0票数 1

我读过一些关于定义有界类型参数的文章,比如

代码语言:javascript
复制
abstract class AbstractClass < T extends ClassA >

abstract class AbstractClass < T extends InterfaceSeq & InterfaceClone >

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

代码语言:javascript
复制
getSeq() - gets sequence number of data object

_clone() - additional cloning logic of the data object

这两种方法都在ClassA下。问题是,ClassA是两年前引入的。

有实现InterfaceSeq (具有getSeq())和InterfaceClone (具有_clone())的旧数据类:

代码语言:javascript
复制
 DataClassA extends ClassA

 DataClassB implements InterfaceSeq, InterfaceClone

DataClassADataClassB都有我需要的两个方法,但是我很难在我的AbstractClass中定义那个逻辑。

现在我有:

代码语言:javascript
复制
AbstractClass < T extends ClassA >

我需要像这样的东西

代码语言:javascript
复制
AbstractClass < T extends ClassA or (InterfaceSeq & InterfaceClone) >

迁移旧的类以使用ClassA太复杂了。任何建议都是值得感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-09-06 10:25:48

几个选项

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

抽象类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 { ... }

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39339730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档