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