你是想 Cache 里面 Value 可以保存任意类型吗? ![这是图片 1]( https://meee.com.tw/R8cfkNx "这是图片 1") ![这是图片 2]( https://meee.com.tw/KLKSVhy "这是图片 2")
MD 不知道为啥发不出来, 如果需要 Cache 里面是任意类型, 不要使用 CacheHelper , 使用 CacheHelper , Cache 用 Cache getByKey 去掉 class 参数,
建议 public T get(String cacheKey,K key){ Cache cache=cacheMap.get(cacheKey); if(cache!=null){ return (T) cache.get(key); } return null; } 你是要限定 V 的类型范围,因为你已经限定了 cache 的 value 是个 V 类型。传 Class clazz , 那你的 V 类型还不如直接定义为 Object 。另外你的成员变量 cacheMap 会有并发安全问题,当然如果 CacheHelper 不会有并发问题,那可以忽略并发安全问题
好像不是因为范形擦除的原因,我觉得还是因为类上面定义的类型是 V ,但是方法上传的是 T ,T 和 V 之间又没有范性约束那么直接理解为两个不相关的类就好了。既然不相关,那编译器只能认为返回的是 object (拿不到任何类型限定信息)。 如果有错误可指出