私は、同じ基本クラスまたは同じ基本クラスを持つメソッドを持つ抽象クラスを作成しようとしています。私はそれが可能だろうと思った:オーバーライドされたメソッドの使用と拡張型
trait InputParams
abstract class A() {
def input[T <: InputParams](datum: T) // abstract
...
}
case class ExtendedInputParams() extends InputParams
class B() extends A() {
override def input[T <: InputParams](datum: T)...
// the input(datum) method needs more to be able to treat datum as an
// ExtendedInputParams, how do I do this?
...
}
クラスBに(私はAがあまりにも変化が必要である疑いがある)どのように私は(new B).input(some-datum-of-type-ExtendedInputParams)
ためExtendedInputParams
としてdatum
タイプを定義しないので、上書きinput
がExtendedInputParams
としてdatum
を治療し、まだそれことを強制することができます拡張されていますInputParams
?また、このメソッドがクラスA
の抽象メソッドをオーバーライドするように強制したいと思います。
サブクラスに制約を狭める明瞭
この 'DEF入力[ExtendedInputParams](基準:ExtendedInputParams)を..これは 'def input [T](datum:T)... 'と同じことです。型パラメータの名前を_naming_しています。既存のタイプと同じ名前を付けることは混乱し、それがあなたがしていることを知らないかもしれないことを示します。 – jwvh
あなたのタイプのparam名が型名を隠しているとき、その間違いが聞こえていないので警告するlinterがあります。 –
もちろん、私は何をしているのか分からないので、私はその質問をしました。 – pferrel