2
我有一個實體類的層次結構,並希望在Java中爲它們創建服務接口的層次結構。那麼UI組件應通過接口來訪問實體相關的服務:Java通用接口層次結構
class BaseEntity { }
class Fruit extends BaseEntity { }
class Banana extends Fruit { }
class Apple extends Fruit { }
(這是在稍有不同的上下文中重用在多個地方)的UI組件需要通過接口FruitService訪問果品服務,我要決定在運行期間,這將是BananaService或AppleService服務接口。我想這將是簡單的使用泛型:
interface Service<T extends BaseEntity>
{
List<T> getAll();
void save (T object);
void delete (T object);
}
// More strict interface only allowed for fruits. Referenced by UI component
interface FruitService<F extends Fruit> extends Service<Fruit> {}
// Interface only allowed for bananas
interface BananaService extends FruitService<Banana> {}
class BananaServiceImpl implements BananaService
{
// Compiler error here because expecting Fruit type:
@Override
public List<Banana> getAll()
{
}
...
}
但是,這是給我下面的編譯器錯誤:
The return type is incompatible with Service<Fruit>.getAll()
爲什麼Java的不承認,執行已參數化香蕉?我希望BananaServiceImpl中的泛型參數能夠像香蕉服務中指定的那樣被解析爲香蕉!
美麗,這個固定的編譯錯誤。謝謝! – Wombat