【发布时间】:2015-11-19 19:05:30
【问题描述】:
我的程序中的 LSP 有问题。我有一个抽象的基类和两种不同类型的产品,一种是食品,另一种是电子设备。我需要创建一个方法来返回这些产品的到期日期/保修。问题是一个是 Date 类型,另一个(保修)是 Int 类型... 你知道如何制作一个同时满足这两种数据类型的方法吗?不使用 switch/if 语句,因为这将违反 OCP。
private static void printExpirationDateStatistics(List<Product> foodProducts) {
for (Product product : foodProducts) {
System.out.println(product.getExpirationDate());
}
}
有没有什么方法可以修改这个函数来处理食品和电子产品,这样我就不必为每个新产品添加另一种方法?
这些是来自基类的方法
public Date getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(Date expirationDate) {
this.expirationDate = expirationDate;
}
public int getWarranty() {
return warranty;
}
public void setWarranty(int warranty) {
this.warranty = warranty;
}
我尝试制作一种 getValidity 方法,但问题是对于食物它应该返回 Date,而对于电子产品应该返回 Int。 有什么想法吗?
【问题讨论】:
-
这与 Liskov 替换无关。问题不在于子类型没有基类型的属性,而在于您有两个不同的运算符,您在一般操作时遇到了麻烦。
标签: java oop types liskov-substitution-principle