ObjectAとObjectBという2つのオブジェクトがあり、いずれもメソッドupdate()を使用しています。私は、ObjectAまたはObjectBのいずれかを受け付ける関数を記述したいと思います(他の型はありません)。概念的には、これは私がしようとしているものです:スカラーのパラメータに複数の型を受け入れる
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
私はそこにこの問題を解決するための他の方法(例えば、更新の構造的なタイピング()メソッド、共通の基底クラス、など)があるが、私の質問があり実現しますこれをScalaでこのようにすることができます。もしそうなら、構文は何ですか?それは何と呼ばれていますか?
: 基本的に、あなたのような何かをしますか?どのような型であるのか分からなければ、どのようなメソッド 'T'があったのか、コンパイラはどのように知っていますか?あなたのクラスが 'update'を持っていることを確認することを意味するなら、それは構造型のためのものです。 – dhg
の可能な複製[スカラに「型の分離」(連合型)がありますか?](http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types)受諾された回答と次の最も高いランク付けの両方を参照して、私のボックス化されていない組合エンコーディングは直接この質問を解決します。 –
@dhg ObjectAとObjectBの両方にメソッドupdate()があり、タイプTがこれらのクラスのどちらか一方を拡張している場合、型Tにupdate()メソッドがあることがわかります。 –