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);
在某些情况下,我的代码会在表中设置null值,但gauva会在put方法中引发异常,这令人困惑 如何实现具有可空值的标准表? (我尝试实现ForwardingTable,重写get / put方法,使用特定的类替换null值,但这还不够,例如:row方法将返回map包含特定的类而不是null)
答案 0 :(得分:1)
public function up()
{
Schema::create('campuses', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('address');
$table->timestamps();
});
}
通常被视为任何null
或Collection
中的键或值,被认为是错误的决定。 jdk本身有一些示例,Map
不允许 不允许使用空键或空值,ConcurrentHashMap
以及其他许多示例也不允许。
在ConcurrentSkipListMap
中添加的静态工厂方法也是如此,例如java-9
。甚至{em}确实的Map::of
都允许使用空键和空值,因此它们都不会失败:
HashMap
使用HashMap<String, String> map = new HashMap<>();
map.put("", null);
map.put(null, "");
的任何新java-8
方法都会抛出HashMap
:
NullPointerException
最后一点是,所有 // value trying to be null
chm.merge("", null, (k, v) -> k);
集合都不是null容忍的,对我来说这是一个很好的决定。