UNO 值语义的不精确近似值

From Apache OpenOffice Wiki
< Zh‎ | Documentation
Revision as of 02:46, 14 May 2009 by Jirong (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search



在 Java 中,一些 UNO 类型通常被视为映射成引用类型的值类型。名义上,它们是 UNO 类型 string、type、any 及 UNO 序列、枚举、结构和异常类型。问题在于如果将这种类型(Java 对象)的值用作 :

  • 存储在 any 中的值;
  • 序列组件的值;
  • 结构或异常成员的值;
  • 接口属性的值;
  • 接口方法调用中的参数或返回值;
  • 服务构造函数调用中的参数;
  • 出现的异常;


则 Java 不会创建该对象的克隆,而是通过对它的多重引用共享对象。现在,如果通过任何一个引用来修改对象,则其他所有引用也可以查看所做的修改。这样就违背了计划的值语义。


在 Java 语言绑定中所选的解决方案禁止对任何 Java 对象进行修改,这些对象用来在上面列出的任何情况下表示 UNO 值。请注意,对于表示 UNO 类型 string 或 UNO 枚举类型值的 Java 对象,一般都能保证这一点,因为对应的 Java 类型不变。如果 Java 类 com.sun.star.Type 为 final,这同样适用于 UNO 类型 type。


从此处使用的意义上来说,修改 Java 对象 A 包括修改其他任何满足以下条件的 Java 对象 B,(1) B 通过一个或多个引用可以到达 A,(2) B 可用来在上面列出的任何情况下表示 UNO 值。对于表示 UNO any 值的 Java 对象,不对其进行修改的限制仅适用于类型 com.sun.star.uno.Any(实际上应不变)的包装对象,或者仅适用于表示类型 stringtype ,以及序列、枚举、结构或异常类型的 UNO 值的未包装对象。


请注意,用于将某些具体的 UNO 值表示为 any 值或实例化多态结构类型的参数成员的类型 java.lang.Booleanjava.lang.Bytejava.lang.Shortjava.lang.Integerjava.lang.Longjava.lang.Floatjava.lang.Doublejava.lang.Character 始终不变,因此,在此无需进行特殊考虑。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages