使用以下课程:
public class Foobar<T> implements Serializable {
private Boolean isTrue;
private String randomMessage;
private T data;
}
在这里构建Foobar的对象时,我可以决定我的数据变量可能是以下内容:
has-a
物件这门课怎么能支持这样的东西?在哪里我可以抛出那些不同的场景来强有力地处理它?如果我只是创建多个类,这是一个过于抽象的尝试吗?
答案 0 :(得分:0)
这是继承的候选人。
创建一个抽象类:
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) { ... }
但是这种方法容易出错,因为你必须自己管理写入一种内容并尝试读取其他类型的情况。