假设我有一个类Foo
,其中包含大量逻辑,而另一个类Bar
本质上是相同的。但是,由于Foo
和Bar
是不同的(但相关)实体,因此我需要从代码中看出差异(即我可以分辨实例是Foo
还是Bar
)
当我在不加思索的情况下一起重击时,我得到了以下结果:
public class Foo {
/* constructors, fields, method, logic and what-not */
}
public class Bar extends Foo {
/* nothing here but constructors */
}
这个可以吗?使
Bar
成为复合类更好吗?例如:public class Bar {
private Foo foo;
/* constructors and a bunch of wrapper methods that call
into foo */
}
甚至在我们使用它的同时,还有一些低技术含量的产品:
public class Foo {
/* constructors, fields, method, logic and what-not */
private boolean isABar; // Could be an enum
}
你怎么看? 您如何处理这些“标记类”?
作为我的代码可能希望如何区别对待
Foo
和Bar
的示例,我的代码将需要能够执行类似List<Foo>
和List<Bar>
的工作。 Foo
不能输入List<Bar>
,反之亦然。 最佳答案
我认为,最好是Foo
和Bar
子类脱离具有所有功能的公共(public)祖先类(也许是AbstractFoo
)。 Foo
和Bar
之间应该在行为上有什么区别?将此差异编码为AbstractFoo
中的抽象方法,而不是通过在代码中使用if
语句进行编码。
示例:而不是这样:
if (foo instanceof Bar) {
// Do Bar-specific things
}
改为执行以下操作:
class Bar extends AbstractFoo {
public void specialOp() {
// Do Bar-specific things
}
}
// ...
foo.specialOp();
这种方法的好处是,如果您需要第三类,就像
Foo
一样,但是有一点点区别,则不必遍历所有代码并添加编辑所有if
语句。 :-)关于java - 可以将 'empty'类扩展为另一个类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/143084/