【发布时间】:2018-08-16 08:21:17
【问题描述】:
Guava StandardTable 类重写 AbstractTable 的 put 方法
// in AbstractTable class
@CanIgnoreReturnValue
@Override
public V put(R rowKey, C columnKey, V value) {
return row(rowKey).put(columnKey, value);
}
// in StandardTable class
@CanIgnoreReturnValue
@Override
public V put(R rowKey, C columnKey, V value) {
checkNotNull(rowKey);
checkNotNull(columnKey);
checkNotNull(value);
return getOrCreate(rowKey).put(columnKey, value);
}
我创建表使用
Tables.newCustomTable(Maps.newLinkedHashMap(), Maps::newHashMap);
我的代码在某些情况下会将空值设置到表中,但是gauva会在put方法中抛出异常,不解 如何实现具有可为空值的标准表? (我尝试实现ForwardingTable,重写get/put方法,使用特定类替换null值,但还不够,例如:row方法将返回map包含特定类而不是null)
【问题讨论】:
-
为什么?因为这就是设计师决定设计它的方式。通常应避免 Null,因为它是错误的巨大来源。请改用特殊值,或更改您的设计,或将您的值包装到 Optional 中。
-
我考虑用一个特殊的值来代替,但是改变会影响很多代码,同样的是将值包装成 Optional
-
如果影响了这么多代码,说明缺少封装。此表不应从任何地方公开访问,而应封装在一个类中。
-
是的,同意。业务代码,你知道,很多开发人员都在处理它。所以我会再考虑一下,如果需要,修复这部分需要一些时间。但是,谢谢
标签: guava