有了這個接口:如何使用泛型實現ServiceLocator?
public interface ServiceLocator {
<T> void setService(Class<T> klass, Factory<T> factory)
<T> void setConstant(Class<T> klass, T value)
<T> T getObject(Class<T> klass)
}
如何實現呢?我的意思是,我如何申報結構數據? 這是正確的嗎?
private Map<Class, Factory> services = new HashMap<>();
private Map<Class, Object> constants = new HashMap<>();
就是這樣,你還可以添加通配符擺脫原料型的警告。 '''地圖,工廠>>''。 –
但是,不是使用泛型有安全類型的要點?我引用了我的具有Object類型的'constants'聲明。有了這個,當我做一個常量的'getObject'時,我不得不做一個強制轉換:'(T)constants.get(klass);'那是不對的,不是嗎? – anat0lius
您無法通過類型系統獲得該級別的安全性。但是你已經(大部分)以封裝的形式存在。 –