我有
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;保存功能?
答案 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) {}
}