java - 如何使此方法更通用
问题描述
我在确定有关 Java 继承的问题时遇到了一些麻烦。我认为这很简单,但它难倒了我。
我有这个超类..
public class MyItem {
private String barCode;
private String price;
public String getBarCode() {
return barCode;
}
public void setBarCode(String barCode) {
this.barCode = barCode;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
我有这两个子类
public class PromotionalItem extends MyItem {
private String promotion;
public String setPromotion(String promotion) {
this.promotion = promotion;
}
public void getPromotion() {
this.promotion = promotion;
}
}
public class SellableItem extends MyItem {
private String quantity;
public String setQuantity(String quantity) {
this.quantity = quantity;
}
public void getQuantity() {
this.quantity = quantity;
}
}
现在我有一个我想要通用的方法,我认为这样的东西可以工作......
public void processItem(MyItem item){
if(item.getClass().isAssignableFrom(PromotionalItem.class)){
processPromotionalItem((PromotionalItem)item);
}
else{
processSellableItem((SellableItem)item);
}
}
但是当我尝试将这些项目转换为它们各自的子类时,我得到了一个 ClassCastException。我认为这样的事情是可行的。我错过了什么吗?有什么替代方法做这样的事情?
解决方案
制作MyClass
抽象并添加一个抽象process
方法,就像@JoakimDanielson 建议的那样。然后,在您的子类中,覆盖该方法并实现您自己的逻辑。
public abstract class MyItem {
...
public abstract void process();
}
public class PromotionalItem extends MyItem {
...
@Override
public void process() {
// do whatever
}
}
public class SellableItem extends MyItem {
...
@Override
public void process() {
// do whatever
}
}
然后,在您的processItem
方法中,只需调用process
:
public void processItem(MyItem item) {
item.process();
}
推荐阅读
- java - 在保持索引相等的同时对多个数组列表进行排序?
- c# - C#编写一个函数来计算以对象数组为参数的平均年龄
- java - 通过 http/1.0 发送时图像加载为 base64 字符串?
- django - Django:在一个查询中连接两个表
- python - 如何在类方法中生成新实例?
- c# - GlobalSystemMediaTransportControlsSession 事件问题
- python - 线路和汽车检测:在opencv中合并两个视频
- python - 尝试使用 tensorflow.keras.models.save_model 保存模型时出现问题
- python-3.x - 为什么导入tensorflow时会出现DLL错误?
- flutter - Flutter - 在 dispose() 之后调用 setState