Doppeldefinitionsfehler trotz unterschiedlicher Parametertypen

Bei den folgenden beiden Methoden wird ein Fehler mit doppelter Definition angezeigt:

def apply[T](state: T, onRender: T => Graphic,
             onMouseEvent: (MouseEvent, T) => T): GraphicPanel = 
  apply(state, onRender, onMouseEvent = Some(onMouseEvent))

und

def apply[T](state: T, onRender: T => Graphic,
             onKeyEvent: (KeyEvent, T) => T): GraphicPanel = 
  apply(state, onRender, onKeyEvent = Some(onKeyEvent))

Das sind beide Methodenüberladungen für die allgemeinerenapply Methode mit der Unterschrift:

def apply[T](state: T, onRender: T => Graphic,
             onTickEvent: Option[T => T] = None, fps: Int = 30,
             onMouseEvent: Option[(MouseEvent, T) => T] = None,
             onMouseMotionEvent: Option[(MouseEvent, T) => T] = None,
             onMouseInputEvent: Option[(MouseEvent, T) => T] = None,
             onKeyEvent: Option[(KeyEvent, T) => T] = None)

Ich würde davon ausgehen, dass ein obwohl die KlassenKeyEvent undMouseEvent haben eine gemeinsame Oberklasse (InputEvent) sollte der Compiler dennoch in der Lage sein, zwischen ihnen zu unterscheiden. Es wird jedoch der Fehler ausgelöst:

double definition: method apply: [T] (state: T, onRender: T => edu.depauw.scales.graphics.Graphic, someOnKeyEvent: (java.awt.event.KeyEvent, T) => T) edu.depauw. scale.graphics.GraphicPanel und Methode gelten: [T] (Status: T, onRender: T => edu.depauw.scales.graphics.Graphic, onMouseEvent: (java.awt.event.MouseEvent, T) => T) edu .depauw.scales.graphics.GraphicPanel in Zeile 115 haben nach dem Löschen den gleichen Typ: (state: Object, onRender: Function1, someOnKeyEvent: Function2) edu.depauw.scales.graphics.GraphicPanel

Hat jemand eine Idee, was los ist? Zugegeben, ich weiß nicht, was mit der Phrase gemeint ist"nach dem Löschen"Vielleicht ist eine Erklärung, wie das funktioniert, hilfreich.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage