当前位置: 首页 > 面试题库 >

JSon模式和继承

单于经纬
2023-03-14
问题内容

我已经使用具有继承性的Java绑定搜索了json模式,并且所有搜索都导致我使用“ allOf”。

使用allOf可能会解决我的问题,但我想知道json模式中是否有可以使用的构造,该构造将生成具有真实Java继承“ B扩展A”的Java代码-
而不是在B内插入A的所有属性?

我想知道这是否被支持/可行,或者我只是在做梦。如果不支持,我很想知道原因。


问题答案:

好吧,我是两者的作者:

  • 当前的JSON Schema验证规范;
  • 以及当今在Java中最常用于JSON模式验证的Java库:json-schema-validator。

因此,我可以回答您的问题,而基本答案是“否”。

为什么?因为当前没有定义架构继承这样的东西。

使用时allOf,您需要所有模式都allOf匹配;并且如果您对此JSON中存在的内容严格要求,则将添加additionalProperties到中false。因此,您无法继承。

真正的解决方案是我针对v5草案提出的一种机制:$mergeand $patch关键字。这些将允许使用RFC 7386或RFC
6902修补架构(请参阅此处以获取更多信息),并确实实现架构继承。

简而言之:

  • 如果设置addithtml" target="_blank">ionalPropertiesfalse,并且基本JSON是对象,则将无法定义其他对象成员;
  • 使用这两个新关键字,您可以。


 类似资料:
  • 问题内容: 我的对象层次结构随着继承树的加深而增加了复杂性。这些都不是抽象的,因此,它们的所有实例都或多或少地达到了目的。 由于参数数量很多,我想使用“构建器模式”来设置属性,而不是对多个构造函数进行编码。由于我需要适应所有排列,因此继承树中的叶类将具有伸缩构造函数。 当我在设计过程中遇到一些问题时,我已经浏览了这里的答案。首先,让我给您一个简单的,简短的示例来说明问题。 现在我们有一些代码可以继

  • 由于无法解析最后一个链接调用,未定义方法,因此此调用将不会编译。所以这种方式要求所有调用都以特定的顺序链接起来,这是非常不切实际的,特别是对于一个深度层次结构树。 现在,在我寻找答案的过程中,我遇到了一个Java Builder类的子类,它建议使用奇怪的递归泛型模式。但是,由于我的层次结构不包含一个抽象类,所以这个解决方案对我不起作用。但是这种方法依赖于抽象和多态性来发挥作用,这就是为什么我不相信

  • 我会用Python编写 方法解析顺序决定了应该首先检查哪个父类的方法/属性,所以我可以判断Pet.age是NewPet.age还是OldPet.age。 那幺如果我让Pet同时从NewPet和OldPet继承,其中name属性在两个模式中都定义了,每个模式中都有不同的值,会怎么样?宠物名是什么? 老宠物会优先吗?新宠物?是否未定义/无效?它是应用程序定义的吗? 我在《大摇大摆的编辑》中试过这个。显

  • 有没有可能编写一个Avro schema/IDL来生成一个Java类,或者扩展一个基类,或者实现一个接口?似乎生成的Java类扩展了< code > org . Apache . avro . specific . specificrecordbase 。所以,工具可能是正确的选择。但是,我不知道这是否可能。 我看过一些示例,其中包含在每个特定架构中定义显式“类型”字段的建议,其关联性大于继承语义

  • 本文向大家介绍JavaScript继承模式粗探,包括了JavaScript继承模式粗探的使用技巧和注意事项,需要的朋友参考一下 真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承。Javascript原型继承是一个被说烂掉了的话题,但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍《Jav

  • YAML中的JSON模式被认为是大多数现代计算机语言的共同特征。 它允许解析JSON文件。 在YAML中强烈建议在JSON模式上考虑其他模式。其主要原因是它包括用户友好的键值组合。 消息可以编码为键,可以在需要时使用。 JSON模式是标量并且缺少值。 JSON模式中的映射条目以某些键和值对的格式表示,其中被视为有效。 示例 空JSON模式表示如下 - JSON表示的输出如下所述 - 示例 以下示例