[问题] 泛型方法中初始画泛型变量

楼主: 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