2016-11-28 19 views
1

私はJavaを学習する途中ですので、非常にシンプルであっても、この1つを私にご負担ください。java.util.LinkedList <ClassName>はClassNameに変換できません

私は2つのLinkedListsで働いている:

private LinkedList<BloodDonor> x; 
private LinkedList<BloodDonor> y; 

public List() 
{ 
    x = new LinkedList<>(); 
    y = new LinkedList<>(); 
} 

私は50回以上の血液を寄付した任意の人がいるかどうかを確認するためのLinkedList xを検索する方法と呼ばれるheroDonorsを持っています。その場合、そのドナーはLinkedList yに追加され、LinkList xから削除されます。 50回以上寄付したドナーがいない場合は、空のLinkedList yが返されます。

この方法で返されるLinkedList yが必要ですが、エラーjava.util.LinkedList<BloodDonor> cannot be converted to BloodDonorが表示されます。

public BloodDonor heroDonors() 
{ 
    int donations = 50; 
    for (BloodDonor donor : x) { 
     int number = donor.getNumberOfDonations(); 
     if (donations < number) { 
      y.add(donor); 
      x.remove(donor); 
     } 
     if (donations > number) { 

     } 
    } 
    return y; 
} 

なぜこのエラーが発生するのですか?ところで

public LinkedList<BloodDonor> heroDonors() { 
    LinkedList<BloodDonor> result = new LinkedList<>(); 
    ... 
    return result; 
} 

+1

エラー:「LinkedList 」型の 'y'を返していますが、メソッドヘッダには戻り値の型として' BloodDonor'があります。 public BloodDonor heroDonors()をpublic LinkedList heroDonors()に変更します。 – misko321

答えて

2

へ:私はこの場合、フィールドyを使うべきではないと思いますが、ローカル変数を宣言してボイドの副作用。ベースタイプList<BloodDonor>を返すことも考えられます。必要に応じて別のコレクションを使用することをお勧めします(アプリケーションクラスListは決して呼び出しません)。

+0

ありがとう、私は 'LinkedList 'のようなメソッドの型を持つことができないことを知りませんでした。私は間違いなくそのことをもっと見ていきます。そして、はい、私は私のメソッドとクラスの命名について作業します。できるだけ早くあなたの答えを受け入れます! –

+0

Re: "この場合、フィールドyを使用せず、副作用を避けるためにローカル変数を宣言するべきだと思う":この問題は、このメソッドは 'this.x'に変更してヒーローを削除する-donors。そのため、主人公*はフィールドに永続させる必要があります。さもなければ、 'heroDonors()'へのその後の呼び出しは空のリストを返します。 (私はあなたが設計上の問題を正しく認識したと思いますが、それを修正するのは簡単ではありません。) – ruakh

1

変更

public BloodDonor heroDonors() 

、あなたが実際にそのタイプのあなたの方法を確認する必要がありBloodDonorのリストを返すようにしたい場合は

public List<BloodDonor> heroDonors() 
関連する問題