使用以下类:
public class Foobar<T> implements Serializable {
private Boolean isTrue;
private String randomMessage;
private T data;
}
在这里构造 Foobar 的对象时,我如何确定我的数据变量可能是以下变量之一:
- 单个对象
- 汽车列表
- 一辆汽车和一些
has-a
物品
这个类怎么能支持这样的东西? 我可以在哪里抛出这些不同的场景来可靠地处理它? 这是不是太抽象了,我应该只创建多个类吗?
这是继承的候选项。
创建一个抽象类:
public abstract class Foobar<T> implements Serializable { ...
然后为每种类型的内容创建三个不同的类:
public class FoobarSingle<T> extends Foobar<T> {
T data;
...
public class FoobarList<T> extends Foobar<T> {
List<T> data;
...
public class FoobarComplex<T> extends Foobar<T> {
T data;
Object anotherField;
...
另一种选择是为其保存的数据创建一个类Foobar<T>
和一个抽象容器类:
public class FoobarSingle<T> extends Foobar<T> {
FoobarContainer<T> data;
...
然后可以对FoobarContainer
进行子类化以保存不同类型的数据。
无论哪种方式,您都必须准备好根据实际类处理不同类型的数据,您可以使用instanceof
运算符来处理这些数据。
单个Foobar
类中为不同类型的数据提供私有字段,然后通过重载方法访问它们:
setData(T car) { ... }
setData(List<T> car) { ... }
setData(T car, Object otherProperty) { ... }
但是这种方法容易出错,因为您必须自己管理写入一种类型的内容而尝试读取另一种类型的内容的情况。