为单个obj创建一个泛型类,列出<obj>并且有一个objs?

时间:2017-11-05 11:52:31

标签: java generics

使用以下课程:

public class Foobar<T> implements Serializable {

    private Boolean isTrue;
    private String randomMessage;
    private T data;

}

在这里构建Foobar的对象时,我可以决定我的数据变量可能是以下内容:

  • 一个单一的对象
  • 汽车清单
  • 一辆汽车和一些has-a物件

这门课怎么能支持这样的东西?在哪里我可以抛出那些不同的场景来强有力地处理它?如果我只是创建多个类,这是一个过于抽象的尝试吗?

1 个答案:

答案 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) { ... }

但是这种方法容易出错,因为你必须自己管理写入一种内容并尝试读取其他类型的情况。