作者JeremyJoung (J.J.)
看板java
標題[問題] 泛型方法中初始畫泛型變數
時間Fri Feb 19 19:31:14 2016
狀況是這樣
我要寫一個自動化物件
我宣告了一個泛型方法 會傳回泛型
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 一個空物件
查過不少資料 但是無解
請問我該怎麼處理?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.232.221
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1455881477.A.417.html
1F:推 LaPass: java 無解 02/19 19:49
2F:推 haha02: 多吃一個Class<T>參數? 02/19 21:26
3F:→ yyc1217: 試試看用.newInstance() 不過我覺得要用design pattern 02/20 00:06
4F:→ yyc1217: 也就是你思考的解決方法換成某種design pattern來比較好 02/20 00:07
5F:→ JeremyJoung: Class<T> T.newInstance() 測試過不行 02/20 02:31
6F:→ ssccg: 要newInstance就要有Class參數,不知道類別怎麼知道new什麼 02/20 02:32
7F:→ ssccg: 類別的空物件? 02/20 02:32
8F:→ JeremyJoung: 我有帶入T作為參考 但是HashMap<>被視為interface 02/20 02:38
9F:→ ssccg: 泛型沒有獨立的class,只能帶HashMap.class 02/20 02:43
10F:→ ssccg: <T> T method(Class<? extends T> claz, T data) 02/20 02:45
11F:→ ssccg: return data != null ? data : claz.newInstance(); 02/20 02:46
12F:→ ssccg: 可以Map<String, Long> map = method(HashMap.class,null); 02/20 02:49
13F:→ ssccg: 但其實設計成帶Supplier<T>,讓caller自己決定default較好 02/20 02:50