gpt4 book ai didi

oop - 接口(interface)的子类型仅与另一个接口(interface)的子类型兼容

转载 作者:行者123 更新时间:2023-12-01 11:32:58 26 4
gpt4 key购买 nike

我已经为一个问题绞尽脑汁很长时间了,但我仍然不知道什么是最好的解决方案。由于应用领域技术性很强,我将用一个简单的例子来说明我的问题。

假设我有以下接口(interface):

public interface Animal {
public void feed(AnimalFood food);
}

public interface AnimalFood {
// some methods
}

以及以下两个实现接口(interface)的类:

public class DogFood implements AnimalFood {
// some methods
}

public class CatFood implements AnimalFood {
// some methods
}

public class Dog implements Animal {
public void feed(AnimalFood food){
// can only eat dog food
}
}

public class Cat implements Animal {
public void feed(AnimalFood food){
// can only eat cat food
}
}

这意味着每次我喂 DogCat 实例时,我都必须验证接收到的 DogFood 实例或CatFood 如果这不是正确的食物种类则抛出异常。

这对我来说很难闻,而且我很确定违反了 Liskov 替换原则!

是否有设计模式,或者什么是管理这种情况的优雅方式?

最佳答案

看来您正在使用 Java。如果是这样,您可以使用泛型来限制 feed

中的参数类型
public interface Animal<T extends AnimalFood> {
void feed(T food);
}



public class Dog implements Animal<DogFood> {
public void feed(DogFood food){
// can only eat dog food
}
}

public class Cat implements Animal<CatFood> {
public void feed(CatFood food){
// can only eat cat food
}
}

关于oop - 接口(interface)的子类型仅与另一个接口(interface)的子类型兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com