1. 问题引出
1 | public class QuotaInfoView { |
如果客户端想要使用如下方式调用的话,则会编译失败
1 | public void test() { |
2. 巧用泛型通配符解决
那么对于以上的问题我们怎么解决呢?可以使用三种泛型方式来解决
尝试一
只要是String及其父类都可以放进来
1 | public void addExtraMap(Map<String, ? super String> map) { |
但是对于这种形式,如果我使用如下的写法,仍然会编译失败
1 | public void test() { |
尝试二
我们看一下String和Integer的通用父类是谁,那一定是object了
1 | public void addExtraMap(Map<String, ? extends Object> map) { |
这种方式还可以再简化
1 | public void addExtraMap(Map<String, ?> map) { |
推荐阅读
3. 扩展字段的推荐写法
大家都特别喜欢用扩展字段,但是开发没有银弹,扩展字段用时一时爽,维护火葬场,如下所示:
有两个问题,一个是类型强转抛出NPE等,一个是不知道扩展字段里面究竟放的什么
1 | public void test() { |
那么怎么才能在使用扩展字段的同时,也降低我们的维护成本呢?笔者推荐一种处理方式:
1 | public class ExtendInfoKey<T> { |
1 | public class ExtendInfoUtils { |