另一个类中的一个类的实例

时间:2014-08-26 15:56:11

标签: java generics abstract-class

我有

public abstract class A
{
    public abstract A get();
}

public abstract class B
{
    public abstract void save(A a);
}

扩展这两个类的一堆不同的类 它们通常配对在一起。所以,如果我有课程C,D
那么 C会延长A D会延伸B 而D的保存功能会期望C才能使其工作。

我有控制器E

public class E
{
    List<B> list;

    public void save(A a)
    {
        // how do I choose correct pair from list?
    }
}

在那个控制器中,我有一个扩展B的类列表。
E中有一个保存函数,它接收扩展的A类作为参数 如何遍历列表中的所有元素并找出哪一类属于哪一类?

感谢任何人的帮助,我正在努力学习复杂的抽象类以及如何将它们联系起来。

编辑:如果我使用的是实例,那么我将在100个类中包含一个巨大的if语句

假设我有100个扩展A类的类和100个扩展B类的类。
如上所述,它们配对在一起。

作为进一步的澄清。

public class D extends B
{
    public void save(A a)
    {
        C c = (C)a.get();
        // proceed saving using c
    }
}

如何避免对所有这些类中的实例进行检查,并知道如何配对它们?有没有更好的办法?

EDIT2 :Pshemo答案很棒,但我还有最后一个问题要解决。

在E级我有保存接收A类的功能 我怎么知道A链接到哪个班级? 如果A类是C的实例,我怎么知道在列表中搜索D的实例并调用那些类&#39;保存功能?

1 个答案:

答案 0 :(得分:2)

我不确定这是否是您所需要的,但看起来您可能希望将B类改为类似

abstract class B<T extends A> {
    public abstract void save(T a);
}

所以现在当你扩展它时,你可以指定T代表哪个类,比如

class D extends B<C> {
    public void save(C a) {}
}