基于stm32的毕业设计
在Java 8中,某些类在Javadoc中有一个小注释,说明它们是基于值的类。 其中包括简短说明的链接,以及有关不使用它们的限制。 这很容易被忽略,如果这样做,则可能会在将来的Java版本中以微妙的方式破坏代码。 为了避免这种情况,我想在自己的文章中介绍基于价值的类,尽管我已经在其他文章中提到了最重要的部分。
总览
在详细说明这些限制之前,本文将首先探讨为什么存在基于值的类以及为什么限制了它们的使用(如果您不耐烦,请跳至此处)。 它将以在FindBugs上的注释结束,这将很快为您提供帮助。
背景
让我们快速了解为什么引入了基于值的类以及JDK中存在的类。
它们为什么存在?
Java的未来版本很可能包含值类型。 我将在未来几周内写他们(所以留调整),并会在一些细节呈现出来。 尽管它们肯定有好处,但本博文未涉及这些好处,这可能会使限制显得毫无意义。 相信我,他们不是! 或者不要相信我自己去看。
现在,让我们看看我已经写了一些关于值类型的内容:
该想法的最大简化是,用户可以定义一种不同于类和接口的新型类型。 它们的主要特征是它们将不会由引用(如类)处理,而是由值(如基元)处理。 或者,正如Brian Goetz在他的介绍性文章《价值观的状态》中所说的那样:
像类一样的代码,像int一样工作!
重要的是要添加值类型将是不变的-就像今天的原始类型一样。
在Java 8中,值类型之前是基于值的类。 未来它们的精确关系尚不清楚,但可能与装箱和拆箱原语(例如
Integer
和int
)相似。
当设计Optional时,现有类型与将来值类型之间的关系变得显而易见。 在指定和记录基于值的类的局限性时也是如此。
存在哪些基于价值的类?
这些都是我在JDK中找到的所有标记为基于值的类:
- java.util: 可选, OptionalDouble , OptionalLong , OptionalInt
- java.time: 持续时间,