[英]Java generics: bound class extend class OR 2 interfaces
我已經完成了關於定義有界類型參數的一些閱讀
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
和DataClassB
都有我需要的2個方法,但是我很難在AbstractClass
定義這個邏輯。
現在我有:
AbstractClass < T extends ClassA >
我需要類似的東西
AbstractClass < T extends ClassA or (InterfaceSeq & InterfaceClone) >
遷移舊類以使用ClassA
過於復雜。 任何建議表示贊賞。
一些選擇
只需使ClassA
實現InterfaceSeq
和InterfaceClone
,然后就可以使用了
abstract class AbstractClass < T extends InterfaceSeq & InterfaceClone >
形成。
在適配器中包裝所有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()); } }
為每種情況制作兩個不同的AbstractClass
,每個實現一個接口。
interface IAbstractClass { ... } class AbstractClassForInterface< T extends InterfaceSeq & InterfaceClone > implements IAbstractClass { ... } class AbstractClassForClassA< T extends ClassA > implements IAbstractClass { ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.