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

看板java作者 (J.J.)時間8年前 (2016/02/19 19:31), 編輯推噓2(2011)
留言13則, 5人參與, 最新討論串1/1
狀況是這樣 我要寫一個自動化物件 我宣告了一個泛型方法 會傳回泛型 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

02/19 19:49, , 1F
java 無解
02/19 19:49, 1F

02/19 21:26, , 2F
多吃一個Class<T>參數?
02/19 21:26, 2F

02/20 00:06, , 3F
試試看用.newInstance() 不過我覺得要用design pattern
02/20 00:06, 3F

02/20 00:07, , 4F
也就是你思考的解決方法換成某種design pattern來比較好
02/20 00:07, 4F

02/20 02:31, , 5F
Class<T> T.newInstance() 測試過不行
02/20 02:31, 5F

02/20 02:32, , 6F
要newInstance就要有Class參數,不知道類別怎麼知道new什麼
02/20 02:32, 6F

02/20 02:32, , 7F
類別的空物件?
02/20 02:32, 7F

02/20 02:38, , 8F
我有帶入T作為參考 但是HashMap<>被視為interface
02/20 02:38, 8F

02/20 02:43, , 9F
泛型沒有獨立的class,只能帶HashMap.class
02/20 02:43, 9F

02/20 02:45, , 10F
<T> T method(Class<? extends T> claz, T data)
02/20 02:45, 10F

02/20 02:46, , 11F
return data != null ? data : claz.newInstance();
02/20 02:46, 11F

02/20 02:49, , 12F
可以Map<String, Long> map = method(HashMap.class,null);
02/20 02:49, 12F

02/20 02:50, , 13F
但其實設計成帶Supplier<T>,讓caller自己決定default較好
02/20 02:50, 13F
文章代碼(AID): #1Mnlq5GN (java)