0

空の抽象基本クラスがあります

abstract class Base{
    Base(){}
}

次に、この基本クラスを拡張するいくつかのクラスがあります

class A extends Base{

}

次に、これらのクラスをインスタンス化し、リストに入れます。

 A it = new A();
 ArrayList<Base> list = new ArrayList<Base>();
 list.add(it);  // add A object

それから私は次のようなことをしたい

   for(Base msg : List){
       if( msg instanceof A){
             A obj = (A)msg; 
        }

    }
But I'm getting errors.

私は何を間違っていますか

4

3 に答える 3

0

Base私は通常、 によって提供されるメソッドを宣言することを期待しAます。したがって、実装が であるという事実に関係なくBase、参照を引き出して使用することができます。A

リスト内の型が共通のインターフェイス規約に従っていない場合、なぜそれらをまとめてリストに入れているのか疑問に思います。それは人生を非常に困難にするでしょう。

于 2012-10-17T13:57:31.530 に答える
0
 for(Base msg : List){<---List is used variable name is list

list使用している代わりに反復するために変数を使用していません。そのListため、エラーが発生しています。

そのはず

for(Base msg : list)
于 2012-10-17T13:58:11.770 に答える
0

Aであることを確認しないでください。これを考慮してください

abstract class Base{
    Base(){}
    void doSomething() { System.out.println("AwesomePossum"); }
}

class A extends Base {
    @Override void doSomething() { System.out.println("Frankie O'Malley"); }
}

その後、繰り返しているときに、次のようなことをする代わりに

for(Base msg : list) {
    if(msg instanceof A) // BAD
}

これを行う:

for(Base msg : List) {
    msg.doSomething();
}
于 2012-10-17T13:56:42.940 に答える