我正在设计一个实体类,它有一个名为"documentYear"的字段,可能有无符号整数值,如1999,2006等.同时,这个字段也可能是"未知",也就是说,不确定文档是哪一年创建.
因此,C#中的可空int类型将非常适合.但是,Java没有像C#那样可以为空的特性.
我有两个选择,但我不喜欢它们:
java.lang.Integer而不是原始类型int;有没有人有更好的选择或想法?
更新:我的实体类将有数万个实例; 因此,java.lang.Integer的开销可能对系统的整体性能来说太重了.
hha*_*fez 27
你将不得不抛弃原始类型或使用一些任意的int值作为你的"无效年份".
负值实际上是一个不错的选择,因为几乎没有机会有一个有效的年份会导致整数溢出并且没有有效的负面年份.
Apo*_*isp 15
成千上万的Integer实例并不是很多.考虑花费几百千字节而不是过早优化.支付正确性是一个很小的代价.
小心使用像null或的标记值0.这基本上等于撒谎,因为0不是一年,而null不是整数.一个常见的错误来源,特别是如果你在某些时候并不是软件的唯一维护者.
考虑使用类型安全的null Option,有时也称为Maybe.在Scala和Haskell等语言中很流行,这就像一个有一个或零个元素的容器.您的字段将具有类型Option<Integer>,该类型将年份字段的可选性质通告给类型系统,并强制其他代码处理可能缺少的年份.
以下是您使用它时如何调用代码:
partyLikeIts.setDocumentYear(Option.some(1999));
Option<Integer> y = doc.getDocumentYear();
if (y.isSome())
   // This doc has a year
else
   // This doc has no year
for (Integer year: y) {
  // This code only executed if the document has a year.
}
| 归档时间: | 
 | 
| 查看次数: | 41228 次 | 
| 最近记录: |