請注意更新,我的問題沒有明確闡述。對不起。使用Java泛型的接口/抽象類的構造函數
讓我們假設我們有下面的代碼:
class Foo extends/implements AnAbstractClass/AnInterface { /* to make sure the constructor with int as input is implemented */
Foo(int magicInt) { magicInt + 1; /* do some fancy calculations */ }
}
class Bar extends/implements AnAbstractClass/AnInterface { /* to make sure the constructor with int as input is implemented */
Bar(int magicInt) { magicInt + 2; /* do some fancy calculations */ }
}
class Factory<T extends/implements AnAbstractClass/AnInterface> {
int magicInt = 0;
T createNewObject() {
return new T(magicInt) // obviously, this is not working (*), see below
}
}
/* how it should work */
Factory<Foo> factory = new Factory<Foo>();
factory.createNewObject() // => Foo with magicInt = 1
Factory<Bar> factory = new Factory<Bar>();
factory.createNewObject() // => Bar with magicInt = 2
在(*)
位置,我不知道該怎麼辦。我怎樣才能確保這樣的簽名的構造函數...(int magicInt)
被實現?我不能定義
具有一定簽名的構造函數中的接口
interface AnInterface { AnInterface(int magicInt); }
一個抽象類,執行一定的構造
abstract class AnAbstractClass { abstract AnAbstractClass(int magicInt); }
這顯然是缺失的要求在子類中實現構造函數:
abstract class AnAbstractClass { AnAbstractClass(int magicInt) {} }
內an interface或abstract class一個靜態方法,它可以覆蓋爲
AnInterface
或AnAbstractClass
每個實現(我覺得一個工廠模式)
什麼是要走的路?
我不明白你的問題是什麼......你究竟想達到什麼目的,爲什麼它不工作? –
我認爲你想要的結果代碼有些奇怪。 'SampleSource'具有擴展'SampleFactory'的參數。然後在'getCurrentSample()'中調用這個示例工廠來創建一個與'SampleFactory'應該具有相同類型的示例。所以創建一個樣本給你一個樣本工廠? – Timo
那麼因爲Java 8靜態方法在接口中是允許的。 – Flown