Vector存储对象的一个问题

              
KillerMan
03-07-05 19 1506

一个Vector v 中存储了A a、 B b、C c三个对象,A,B,C 三个类实现了一个共同的接口show(),但各自的实际工作有很大差别。
现在要访问a,b,c三个对象的show()方法,该如何访问?

问题:
一个对象存入到Vector中时,转换成了一个Object对象,从Vector中取出时也是一个Object,需要先转换成原来的类的类型,才能调用该类的方法,a,b,c存入到Vector中后(程序)就不知道它属于那个类,也就不知道该怎么转换。

该如何解决这个问题,原来考虑使用reflect来解决,但是不行。

KillerMan
2003-07-05 17:08

如果A,B,C三个类都是集成的同一个超类,超类又实现的同一个接口就没问题。
但A,B,C单个类的差别太大了,不可能使用同一个超类。

likewater
2003-07-05 18:08

弄一个接口不行吗?
A/B/C都IMPLEMENTS这个接口就是了,中间我看不必走这个超类了吧

KillerMan
2003-07-06 12:03

接口解决不料这个问题。
问题具体在这里:
Vector v = new Vector();
v.add(new A());
v.add(new B());
v.add(new C());
Enumeration e = v.elements();
while(e.hasMoreElements()){
//问题在这里,Type在程序中没办法决定是什么
Type tmp = (Type) e.nextElement();
//A,B,C所实现的接口show()
tmp.show();
}

接口,是不行的。共同的超类可以,例如三个类的超类都是D,那么Type是D就行了,根据多态的理论,tmp会自动调用合适的show()。
但,a,b,c的功能差别太大了,除了show()方法的功能有相似之处。所有肯定不能让他们继承同一个超类。

wys1978
2003-07-06 22:21

quote: 该如何解决这个问题,原来考虑使用reflect来解决,但是不行。

为什么不能使用reflect?


while(e.hasMoreElements()){
//use reflect
Object tmp = e.nextElement();
Method show = tmp.getClass().getMethod(
"show");
//assume parameters is null;
show.invoke(null, null);
}

4Go 1 2 3 4 下一页