Generics: Rückgabetyp geht nur mit <?> statt mit "<? extends XX>"

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine eigene Annotation, in dem ich einen event Type als Parameter setzen möchte. Das ganze sieht so aus:

Java:
@Target( ElementType.METHOD )
@Retention( RetentionPolicy.RUNTIME )
public @interface MyAnnotation
{
	Class< ? extends UIEvent > eventType() default MouseReleasedEvent.class;
}

Dabei ist zu beachten, dass "MouseReleasedEvent" von "SwingEvent" erbt, und "SwingEvent" erbt von "UIEvent", also:

Code:
EventObject
  UIEvent
    SwingEvent
      MouseReleasedEvent

Es wird dieser Compilerfehler angezeigt:

Java:
Type mismatch: cannot convert from Class<MouseReleasedEvent> to Class<? extends UIEvent>

Wenn ich das "default MouseReleasedEvent.class" entferne, so kompiliert der Code.

Ich hatte jetzt naiverweise gedacht, dass ich den Typ so beschränken kann, dass eben nur "UIEvent"s und davon abgeleitete Klassen zurückgegeben/gesetzt werden können.


Kann mir jemand erklären, warum die obige Fehlermeldung auftaucht?


Vielen Dank für Eure Hilfe!
 
Der erste Teil stimmt auch, zumindest wenn man den Tutorials im Internet glaubt. Was ich bis jetzt noch nicht gekannt/gefunden habe ist das vergeben eines default Types. Bist du dir sicher das das in Java geht?
 
Hallo,

Das sollte auch gehen...
hast du vielleicht ausversehen import org.w3c.dom.events.UIEvent; anstatt "deinem" UIEvent importiert?

Gruß Tom
 
Zurück