oop - 派生一个类只是为了识别类型是个好主意吗?

标签 oop inheritance refactoring

问题比平时长,但我已尝试详细说明。请耐心阅读并阅读整个问题,这可能是一个有趣的问题

我目前有一个方法 A 接受具有两个属性的对象 List<X>但代表两个不同的实体,因此该属性被恰本地命名为 R 和 S。类结构是

class A
{
   List<X> R;
   List<X> S;
}

现在我有一个方法可以接受类型 A 的输入并与(集合,下面的方法签名)一起使用
public void updateMe(A objA)
{

}

现在我有一个案例,我需要重用这个方法,但现在的案例是我不需要区分实体,因此只有一个列表,List<X> T。

现在我的问题是如何重构该方法以使用 singleList,但仍然提供区分前一种情况下的两个列表的能力。

我的方法将更新这些集合,因此要么添加到列表中,要么从中删除。

我目前的解决方案是创建新的类来表示从 X 派生的两个不同的实体,然后将这个基类列表传递给我的方法,让该方法更新这个基类,然后在阅读它时我将能够识别哪个对象是什么类型。

因此我的新类(class)将是
public class X1:X
{
}

public class X2:X
{
}



class A
{
   List<X> R;
}

这是最好的解决方案还是我可以在这里采取任何其他方法..我似乎不喜欢扩展类只是为了识别类型而不添加任何属性的想法..

最佳答案

我会说,要么:
1.使用枚举:)
2. 使用抽象方法 getList() 使类 Y&Z 扩展抽象 X。但这对于简单的案例来说肯定是一种矫枉过正。所以,回到 1 - 只需使用枚举 :)

关于oop - 派生一个类只是为了识别类型是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854064/

相关文章:

refactoring - 方法重构

Java - 将通用类的实例转换为专用类的实例

c# - 公共(public)实例变量访问错误: "An object reference is required for the non-static field, method, or property..."

c++构造函数将引用传递给基类对象

java - 使用仅调用重写的父类(super class)方法的子类方法有好处吗?

go - 如果更改仅是一种参数类型,则避免代码重复

ruby-on-rails - 有效地重命名 Rails 项目

oop - 获取 ABAP 对象的标识号

java - 一切都有自己的类(class)

python - 如何在Python中的super()函数中指定使用哪个父类?