当前位置: 首页 > 知识库问答 >
问题:

自定义比较器,以反映多种变化和更深层次的差异

申屠洛华
2023-03-14

我在下面定义了以下类,其中我们有一个人拥有一个商店,他们在那里出售一个商品。

public class Person
   public Store store


public class Store
   public String name
   public Item item
   public String location

public class Item
  public String name

问题:1。如何实现用于存储的CustomComparator,使其创建两个ValueChanges:一个用于名称,一个用于位置。2.如何使用同一个CustomComparator让Javers也对项目进行差异?谢了!

共有1个答案

年烈
2023-03-14

很快,你就不能了。CustomPropertyComparator.compare()方法返回PropertyChange,它可以是复杂对象(如ListChange)或扩展PropertyChange的任何类型的对象。但是,PropertyChange仍然只描述了一个属性上的更改。

Javers方法意味着为每个值类型注册CustomValueComparator。

例如,如果您有Item类:

class Item {
    Price price
    Characteristics Characteristics 
}
javersBuilder
    .registerValue(Price.class, (a,b) -> a.compareTo(b) == 0)
    .registerValue(Characteristics.class, (a,b) -> a.compareTo(b) == 0)
 类似资料:
  • 我正在用Jackson反序列化在Java中进行继承实验。我有一个基类: ClassA也是抽象的 我的子类: 如果我以以下形式传入的JSON: 我得到一个错误,无法构造ClassA的实例(不存在像默认构造一样的创建者):抽象类型要么需要映射到具体类型,要么需要自定义反序列化器,要么包含我遇到的其他类型信息https://github.com/FasterXML/jackson-databind/is

  • 在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。

  • I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器

  • 下面的代码片段适用于条件1,但不适用于条件2。

  • 比较器的JavaDoc指出 强烈建议(尽管不是必需的)自然顺序与相等一致。 他们还举了一个“奇怪”行为的例子,当<代码>(a.equals(b) 现在,有人能给我举一个例子说明在case

  • 这是我的作业,a)编写一个表示具有int系数a、b、c的二次ax^2 bx c的二次函数。为a、b、c提供一个具有3个int参数的构造函数。提供一个方法double valueAt(double x)返回该二次函数在x的值。还提供一个toString方法。 b) 重写equals方法quadraticmethod类。如果两个二次函数各自的系数相等,则应认为它们相等 c) 使功能对象具有可比性。如果