2016-03-31 7 views
0

私はSetオブジェクトを返すAPIからメソッドを呼び出しています。私が知る限り、Setはインターフェースであり、インターフェースをインスタンス化することはできません。私はこのセットをとり、その上でtoArray()を呼び出すことができます。 Setは実際に何を返していますか?メソッドはどのようにしてJavaでSetを返すことができますか?

+7

このメソッドは、 'Set'インタフェースを実装するいくつかのクラスのインスタンスを返します。 [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29) – khelwood

答えて

5

それはSetを返すんが、Setは単なるインタフェース以上であることを、理解する必要があります。

Setを返すことができます実装するすべてのクラスのすべての実装。

public Set getMySet(){ 
    return new HashSet(); 
} 

Set道具HashSetいるので、これは動作します有効なコードです。

アプリケーションを実装ではなくインターフェイスに書き込むことは、広く使用されています。結局のところ、あなたのコード(例えば、サービスを使ったUI)を書く(そしてテストする)必要があるのはインターフェイスです。

具体的な実装をまだ手に入れることはできませんが、まだ存在しないかもしれませんが、必要な作業をすべて完了することができます。

+0

を参照してください。メソッドを作成した開発者は、Setインターフェイスを実装したオブジェクトを返すように設計しました。このメソッドはSetを返すので、そのSetにするオブジェクトを選択するオプションがありますか?開発者などがHashSetオブジェクトを返すかもしれませんが、TreeSet ts = methodThatReturnsSet()と言うことはできますか? –

+1

@brentryczakいいえ、必要に応じて受信したセットを別のタイプに変換することはできますが、メソッドの戻り値の型は "Setを実装するものを返します。起こる。 " – khelwood

+0

私のオプションは、インターフェイスが含まれているreturnステートメント(つまり、methodThatReturnsSet()。someMethod()、またはそれを実装するクラスにキャストするためのメソッドを呼び出すことです(TreeSet ts =(TreeSet)methodThatReturnsSet 。 –

1

メソッドからインターフェイスを返すということは、返されたオブジェクトがそのインターフェイスを実装することを意味します。

この場合、返されるオブジェクトは 'Set'を実装することを意味します。そのインタフェースに含まれているメソッドを呼び出すことはできますが、実装クラスからメソッドを呼び出すことはできません。

関連する問題