看板 java 關於我們 聯絡資訊
狀況是這樣 我要寫一個自動化物件 我宣告了一個泛型方法 會傳回泛型 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://www.ptt.cc/bbs/java/M.1455881477.A.417.html
LaPass: java 無解 02/19 19:49
haha02: 多吃一個Class<T>參數? 02/19 21:26
yyc1217: 試試看用.newInstance() 不過我覺得要用design pattern 02/20 00:06
yyc1217: 也就是你思考的解決方法換成某種design pattern來比較好 02/20 00:07
JeremyJoung: Class<T> T.newInstance() 測試過不行 02/20 02:31
ssccg: 要newInstance就要有Class參數,不知道類別怎麼知道new什麼 02/20 02:32
ssccg: 類別的空物件? 02/20 02:32
JeremyJoung: 我有帶入T作為參考 但是HashMap<>被視為interface 02/20 02:38
ssccg: 泛型沒有獨立的class,只能帶HashMap.class 02/20 02:43
ssccg: <T> T method(Class<? extends T> claz, T data) 02/20 02:45
ssccg: return data != null ? data : claz.newInstance(); 02/20 02:46
ssccg: 可以Map<String, Long> map = method(HashMap.class,null); 02/20 02:49
ssccg: 但其實設計成帶Supplier<T>,讓caller自己決定default較好 02/20 02:50