我们正在创建一些 WCF 服务,这些服务最初将由 .NET 客户端使用,但未来将由 Java 客户端使用。
因此,我们希望避免在接口中使用 Java 不支持的任何数据类型。
我们所知道的具体一种是可为空的值类型。
一个建议是,我们可以通过使用字符串来表示(例如,可为空的 int)来支持这些。因此,空字符串表示 null,否则要求字符串必须可解析为 int。
谁能推荐一个更好的选择,或者这就是你会做的?
我希望,如果您可以通过 WCF 公开一个可为空的整数,那么从 Java 中消耗的任何东西都将使用包装器类型——Integer
而不是int
,Byte
而不是byte
等。当然,这些是引用类型,而 .NET 中的可空值类型仍然是值类型,因此您将获得更大的 GC 压力,并且通常效率会降低,但是鉴于 Java 不支持用户定义的值类型,您对此无能为力。
几年前我参与的一个项目(也是 .NET/Java 组合)中使用的一种方法是添加指标属性:NumProperty
和NumPropertyIsNull
. 它不是特别漂亮,但它确实有效。
作为一个侧面节点,我认为最终我们无法找到一个商业案例,其中的区别0
和null
实际很重要。