问题比平时长,但我已尝试详细说明。请耐心阅读并阅读整个问题,这可能是一个有趣的问题
我目前有一个方法 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/