0

一般的なリンクリストを作成しました

Container<String, Person> 

Person オブジェクトを保持します。それぞれ Owners と Mechanics と呼ばれる 2 つのサブクラスのオブジェクトをこのリストに入力する必要があります。この部分は現在問題なく進んでいます (オーナー オブジェクトとメカニック オブジェクトをそれぞれが属するサブクラスとして作成し、挿入関数を使用してそれらをリストに追加しています) が、次の方法を使用してオーナーまたはメカニックを抽出しようとすると:

Owner o = container.get("John");

次のエラーが表示されます。

error: "incompatible types
        Owner o = container.get("John");                                  ^
         required: Eier
  found:    Person

この問題を回避/解決するにはどうすればよいですか?

4

3 に答える 3

2

これは、コンパイラがそれ"John"Owner. あなたはキャストすることができます:

Owner o = (Owner)container.get("John");

Ownerまたは、 を使用して回避可能な例外を回避するためにキャスト前かどうかを確認しinstanceofます。

Person p = container.get("John");
if (p instanceof Owner){
    Owner o = (Owner) p;
}
于 2013-03-10T12:43:10.113 に答える
2

コンパイラは正しいです。オブジェクトについて知っているのは、それがPersonではなく であることだけOwnerです。であることが確実にわかっている場合"John"Owner、明示的なキャストを追加します。

"John"Owner. _ サブクラスに「ダウンキャスト」する必要が生じた場合は、 と を同じコンテナーに入れるという決定を評価する必要がありますOwnerMechanicおそらく、2 つのサブクラスのコンテナーが分離されていれば、コードはより適切になるでしょう。

于 2013-03-10T12:44:01.140 に答える
1

タイプキャストする必要があります

Owner o = (Owner)container.get("John");

その力学なら、あなたがする必要があります

Mechanics m = (Mechanics) container.get("John");  

だから、こうすればよかった

for(Person p : container)  
{  
  if (p instance of Owner)  
     Owner o = (Owner) p;  
  else  
     Mechanics m = (Mechanics) p;  
}
于 2013-03-10T12:44:38.083 に答える