狀況是這樣
我要寫一個自動化物件
我宣告了一個泛型方法 會傳回泛型
static public <T> T sesPool(String col,T tp)
目標的資料有時會不存在
而我不要null 所以需要初始化T
然後 問題發生了
首先不能 new T()
"Cannot instantiate the type T"
接者
我改成<T extends Class>後
當我投入sesPool("", new HashMap<String, Integer>())
後
又跟我講說 介面不屬於CLASS
我需要投入各種資料 包括潛在的泛型資料(各種Map)
同時需要在資料不存在時 自動new 一個空物件
查過不少資料 但是無解
請問我該怎麼處理?
謝謝
作者:
LaPass (LaPass)
2016-02-19 19:49:00java 無解
作者:
haha02 (來人!上夾棍!)
2016-02-19 21:26:00多吃一個Class<T>參數?
作者:
yyc1217 (somo)
2016-02-20 00:06:00試試看用.newInstance() 不過我覺得要用design pattern也就是你思考的解決方法換成某種design pattern來比較好
Class<T> T.newInstance() 測試過不行
作者:
ssccg (23)
2016-02-20 02:32:00要newInstance就要有Class參數,不知道類別怎麼知道new什麼類別的空物件?
我有帶入T作為參考 但是HashMap<>被視為interface
作者:
ssccg (23)
2016-02-20 02:43:00泛型沒有獨立的class,只能帶HashMap.class<T> T method(Class<? extends T> claz, T data)return data != null ? data : claz.newInstance();可以Map<String, Long> map = method(HashMap.class,null);但其實設計成帶Supplier<T>,讓caller自己決定default較好