簡體   English   中英

Java泛型:綁定類擴展類OR 2接口

[英]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

DataClassADataClassB都有我需要的2個方法,但是我很難在AbstractClass定義這個邏輯。

現在我有:

AbstractClass < T extends ClassA >

我需要類似的東西

AbstractClass < T extends ClassA or (InterfaceSeq & InterfaceClone) >

遷移舊類以使用ClassA過於復雜。 任何建議表示贊賞。

一些選擇

  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 ,每個實現一個接口。

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM