swagger Java继承,如何在Java中实现分层继承

siv3szwd  于 2022-11-23  发布在  Java
关注(0)|答案(1)|浏览(266)

我们能在java中实现层次继承吗?我有一个类似这样的场景

class Person {
     String name;
     int age;
     List<Address> addressList;
     
     // ... getters, setters
}
class Address {
    String state;
    String contry;
    // ... getters, setters
}

class ExtendedAddress extends Address {
    String street;
    // ... getters, setters
}

class ExtendedPerson extends Person {
    String occupation;
    List<ExtendedAddress> addressList;
    // ... getters, setters
}

但在ExtebdedPerson类中,getter和setter在其返回类型更改时给予出错。
这里我需要更改addressList的名称或者手动编写setter和getter逻辑。
我不能,因为这些DTO是由swagger生成的。
有没有一种方法我可以遵循在这里?或者,有没有一种方法我可以写我的昂首阔步yaml更有效。
这是我对狂妄自大的定义

Person:
  type: object
  properties:  
     name:
      type: string 
      description: "Name of the person"
     age:
      type: integer
      description: "Age of the person"  
     addressList:
      type: array
      description: "Address List"
      items:
       $ref: '#/definitions/Address' 
 Address:
  type: object
  properties:  
     state:
      type: string 
      description: "Name of the state"
     country:
      type: string 
      description: "Name of the country"
      
 ExtendedAddress:
  allOf:
    - $ref: '#/definitions/Address'
    - type: object
  type: object
  properties:  
     street:
      type: string 
      description: "Name of the street"

 ExtendedPerson:
  allOf:
    - $ref: '#/definitions/Person'
  type: object
  properties:  
     occupation:
      type: string 
      description: "Name of the occupation"
     addressList:
      type: array
      description: "Address List"
      items:
       $ref: '#/definitions/ExtendedAddress'
lyr7nygr

lyr7nygr1#

您不能以这种方式覆盖getAddress
原因在于,在Person中,你已经说过getAddress返回一个List,它可以接受任何类型的AddressAddress本身或任何扩展它的类)。
然而,在ExtendedPerson中,你试图重新定义getAddress,说List现在只能包含ExtendedAddress对象,所以ExtendedPerson不能满足Person定义的契约。
例如:如果我创建了Address的另一个子类,比如DeliveryAddress extends Address,我将被允许将DeliveryAddress对象添加到Person中的List,但不允许将它们从ExtendedPerson添加到List。因此ExtendedPerson不能扩展Person
您必须建立个别的getter方法,或重复使用相同的方法并转换结果。

相关问题