Vector存储对象的一个问题

03-07-05 KillerMan
              

一个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 下一页