作者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/cn.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