[問題] 泛型方法中初始畫泛型變數

作者: JeremyJoung (J.J.)   2016-02-19 19:31:14
狀況是這樣
我要寫一個自動化物件
我宣告了一個泛型方法 會傳回泛型
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:00
java 無解
作者: haha02 (來人!上夾棍!)   2016-02-19 21:26:00
多吃一個Class<T>參數?
作者: yyc1217 (somo)   2016-02-20 00:06:00
試試看用.newInstance() 不過我覺得要用design pattern也就是你思考的解決方法換成某種design pattern來比較好
作者: JeremyJoung (J.J.)   2016-02-20 02:31:00
Class<T> T.newInstance() 測試過不行
作者: ssccg (23)   2016-02-20 02:32:00
要newInstance就要有Class參數,不知道類別怎麼知道new什麼類別的空物件?
作者: JeremyJoung (J.J.)   2016-02-20 02:38:00
我有帶入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較好

Links booklink

Contact Us: admin [ a t ] ucptt.com