2
從C++遷移到Java。Java通用接口返回類型
我有一個第三方代碼與我需要實現的界面是這樣的。
public interface Foo<T>{
public T doSomething();
}
欲實現此接口,這樣我可以調用doSomething的(),並獲得3級不同的類A, B and C
延伸,如下一個共同的基Z
。
public class A extends Z{...};
public class B extends Z{...};
public class C extends Z{...};
我找不到任何避免編寫以下3類的方法。
public class ARet implements Foo<A>{...}
public class BRet implements Foo<B>{...}
public class CRet implements Foo<C>{...}
對於給定的接口Foo
,是不是可以寫返回T extends Z
一些東西,看起來像public class Ret implements Foo<T extends Z>{...}
的實現。這似乎不起作用。有沒有什麼辦法可以避免這三個班級,或者沒有辦法繞過它?
注意函數簽名'T DoSomething的'在接口()。它將返回一個'T'類型而不需要將'T'對象作爲參數之一。這意味着要返回的對象'T'必須在'doSomething()'函數中創建。雖然我是Java新手,但我的理解是,由於類型擦除,這是不可能的。還是我誤解了這些概念? – cplusplusrat
@cplusplusrat它也可以意味着實現類有一個'set(T對象)'或者其他一些將'T'實例傳遞給實現類實例的方法,並且你的'something()'方法返回那個實例。這與'java.util.List'接口類似,其'get(int i)'方法返回一個'T'實例。 ''T''實例不能在'doSomething()'方法中創建,除非你傳遞一個'Class '參數給它。 –
Eran
好的,所以爲了您的解決方案的工作,沒有逃脫setter方法,以便'doSomething()'有對象工作並返回。那是我的想法,但需要第二個意見。謝謝。我會將此標記爲已解決。 – cplusplusrat