2016-08-12 1 views
-1

IUncleはUncleが実装するインタフェースであると仮定します。 クラスChild内で具体的なクラスを使用しないことを約束します。子供がIuncleの実装で使用されるようにするためです。 どのようにして、Child(以下)の実装を、Uncleの実装に適した方法で変更できますか。タイプが一般的なJavaコレクションである属性に要素を追加する

メインクラスで
public class Child { 

private List<IUncle> uncles; 

public Child(List<IUncle> uncles){ 
    this.uncles = uncles; 
} 

public void addUncle(IUncle uncle) { 
    this.uncles.add(uncle); 
} 

} 

は、私はこのように、このクラスを使用します。

List<Uncle> uncles = new ArrayList<Uncle>(); 
Child oneChild = new Child(uncles); 
oneChild.addUncle(new Uncle); 

これがすべてでは動作しませんです!

Javaでこの状況に対処する適切な方法を教えてください。

+0

'リスト'と 'リスト'は互換性がありません。彼らは同じものを保存しません。 – Andreas

+0

「アンクル」とは何ですか?「アイヌクル」とは何ですか? – user1803551

+0

IUncleは実際にはインターフェイスであり、Uncleはそのインターフェイスを実装するクラスです。そして、はい、私はリストとリストは互換性がないことを知っています。問題は、実装の内部で具体的なクラスを使用しないことによって、SOLIDの原則を尊重する方法でこのクラスを扱う方法です。 – mokolop

答えて

0

あなたは構文エラーを持って、私はあなたのUncleクラスがどのように見えるかわからないけど、あなたはUncleを追加するための方法を指定しますが、あなたがそれを使用しませんでした

oneChild.addUncle(new Uncle()); 

を試してみてください。

また、IUncleインターフェイス(??)とオブジェクトUncleを混同していると思います。彼らは同じものではなく、交換可能ではありません。

+1

コンパイルエラーについて解答したいので、 'List 'と 'List 'に互換性がない理由、つまりなぜ 'new Child(uncles)'がコンパイルされないのかを説明するために、おじさんはIUncle'を実装していますか? – Andreas

+0

@アンドレアス私は「IUncle」が何であるか分からないので、これを説明する方法を失っています。おそらくインターフェースですが、わかりません。 –

+0

IUncleはインターフェイスであり、Uncleはそのインターフェイスを実装しています。 – mokolop

0

前の私のマネージャーの一人が答えに来ました。それはかなり簡単でした!

実際、子クラスでは何も問題はありません。問題はメインクラスにあります。これは次のようになります:

List<IUncle> uncles = new ArrayList<IUncle>(); 
Child oneChild = new Child(uncles); 
oneChild.addUncle(new Uncle); 

ありがとう!

関連する問題