繁体   English   中英

为什么javax.json只包含接口?

[英]Why javax.json containts only interfaces?

javax.json文档

来自文档的示例:

JsonArray value = Json.createArrayBuilder()
     .add(Json.createObjectBuilder()
         .add("type", "home")
         .add("number", "212 555-1234"))
     .add(Json.createObjectBuilder()
         .add("type", "fax")
         .add("number", "646 555-4567"))
     .build();

但是JsonArray是一个接口,而不是一个类,并且变量的类型不能是一个接口。 那么class JsonArray在哪里? 我猜包javax.json包含它,但是为什么没有记录呢?

不过没什么大不了的,我已经阅读了接口的详细信息,它显示了所有必需的方法/构造函数/返回类型,现在我知道如何使用这些“类”。

您正在阅读的文档与JSR 353规范中定义的API有关。 不同的项目可以提供API的实现。 例如, 此页面链接到参考实现。

genson等其他项目提供了自己的标准实施。

为什么javax.json只包含接口?

因为,有意的是,实现者希望隐藏实现的细节,并允许您仅通过工厂方法(而不是通过new实例化它们)来创建实例。

那么类JsonArray在哪里? ...但是为什么没有记录?

隐藏在私有包中的某个位置,可能以com.sun开头。 即使找到它,直接使用它也是非常不明智的,因为它们可能会在下一个jdk安全更新中更改实现,从而破坏任何依赖未记录功能的代码。

Java EE是规范。 它没有实现。 它依靠第三方来实现规范。 javax.json包是Java EE的一部分(或最终将成为Java EE的一部分)。 因此,包括此jar只会为您提供json api的接口。 您将需要在运行时提供一个实现,以使其起作用。 通常,即使事实上这说起来容易做起来难,您的代码也应该与实现无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM