Swift"隐式解包的选项如何?#34;不同于Java" autoboxing"整数?

时间:2016-08-07 22:27:11

标签: java swift optional autoboxing

Swift" 的想法隐含地解包了选项"与Java" autoboxing "相同整数?如果xObj被声明为"隐式解包选项":

,则只能在Swift中执行以下运行时异常
Integer xObj = new Integer(-1);  
xObj = null;  // could do this with an implicitly unwrapped optional as well.
Integer.valueOf(xObj); // <-- exception. Integer.valueOf(int x); couldn't deal with this.

重点是&#34;隐含地解开选项&#34;可以是零,但你最好小心,不要在预期非零参考时使用它们,对吗?

1 个答案:

答案 0 :(得分:2)

  

是Swift&#34;隐含式解包的选项&#34;与Java&#34; autoboxing&#34;相同整数?

?不,这个声明过于强烈了。在某些情况下,是否有类似的目的?是的。

Autoboxing在Java中使用有两个主要原因:

  1. 将值类型(基元)转换为对象,以便它们可以存储在集合中,例如ArrayListHashMap

    • 需要此处理的唯一基元是byteshortintlongfloatdouble,{{1 }和boolean。因此,为什么这些是具有自动框对象等价物的唯一类型。 Java自动装箱仅限于这些类型,而在Swift中,Optionals适用于所有类型。
    • Swift的原生馆藏可以存储价值类型,因此无需进行此转换。
    • 基金会的集合只能存储指针。使用它们时,Swift通过自动将数值类型装入char对象来做与Java类似的事情。
    • Swift的Optional是一个枚举,一个值类型,无论它是包装引用类型还是值类型。
  2. 在不使用哨兵值的情况下允许可空性。即返回NSNumber而不是null-1

    • 这就是Swift的选项所适用的。