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