2017-11-13 5 views
0

私は1つのプログラムを作成しようとしていますが、私の問題です:抽象クラスロジックの問題

私は 'Engine'というインターフェースを持っています。

私が持っている工場で

コンストラクタで悲しいこと
if(request instanceof TypeA){ return new TypeAAA(request);} 
if(request instanceof TypeB){ return new TypeBBB(request);} 

私がやろう:

(TypeA) requestArg 

それは言っている - 未定義のコンストラクタを。 (TypeAAA)TypeA requestArgの明白なキャストなしでこれを行うことはできますか?

答えて

1

TypeAにキャストし、TypeAAAにキャストしたいと仮定しています(例:TypeA)。

ちょっと前にクラスinstanceofだったかどうかをチェックしても、それはあなた自身でキャストする必要があります。 Kotlinでは、コンパイラはそれを理解するのに十分なほどスマートになりますが、Javaではまだキャストを行う必要があります。

+0

答えが誤っていて、編集されているため、誤字があります。 – saferJo

+0

これは私が避けようとしていたものなので、よりエレガントな方法ですか?私は理由は分かっていませんが、現時点ではinstanceof ... castは嫌いな構造です:) – saferJo

+0

それはあなたのエンジンが何をしたいかによって異なります。それらは同じスーパークラスを継承し、非常に似た振る舞いを持ち、特定のサブクラスのメソッドを単純にオーバーライドすることができます。オブジェクトを使用するクラスは、それがどんな型のクラスでも正確に知る必要はありませんEngineから継承します。 Javaコレクションのインタフェースがどのように実装されているかを考えてみましょう。たとえば、リストを使用する場合、ListArrayまたはVectorかどうかを知る必要はありません。リストのコントラクトに従うだけです。 – Casper

関連する問題