如何设置接口的返回值,使实现类返回各自的对象实例?
实现接口返回不同对象的解决方案
要让实现接口的各个类返回不同类型的对象,最直接且规范的做法是给接口添加泛型参数,这样既能保证接口的通用性,又能让每个实现类明确自己的返回对象类型。
1. 改造泛型接口
首先将原接口修改为带泛型的形式,泛型参数用来定义方法的返回类型:
interface Upgradable<T> { T plantUpgrade(); }
注:Java方法名规范是小驼峰命名,所以把PlantUpgrade改成了plantUpgrade。
2. 实现类指定返回类型
每个实现接口的类,在实现时明确泛型参数为自己要返回的对象类型,同时重写方法返回对应对象:
public class Sunflower extends Plant implements Upgradable<Sunflower> { @Override public Sunflower plantUpgrade() { // 编写向日葵的升级逻辑,比如创建升级后的实例 return new Sunflower(); } }
3. 其他实现类示例
如果有其他植物类需要实现该接口,同样可以指定自己的返回类型:
public class Peashooter extends Plant implements Upgradable<Peashooter> { @Override public Peashooter plantUpgrade() { // 豌豆射手的升级逻辑 return new Peashooter(); } }
方案优势
- 编译时就能做类型校验,避免运行时出现类型转换错误
- 接口具备通用性,无需为每种返回类型单独定义接口
- 代码可读性强,一眼就能看出每个实现类的返回对象类型
内容的提问来源于stack exchange,提问作者Jethro Cenas
相关产品推荐
相关产品推荐

