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

时间:2016-09-26 16:45:45

标签: java json

javax.json documentation

来自文档的示例:

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包含它,但为什么不记录?

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

3 个答案:

答案 0 :(得分:2)

您正在阅读的文档是关于JSR 353规范中定义的API。不同的项目可以为API提供实现。例如,this page链接到参考实现。

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

答案 1 :(得分:1)

  

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

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

  

那么JsonArray类在哪里? ......但为什么不记录?

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

答案 2 :(得分:1)

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