2017-03-02 3 views
0

Keine Probleme hierJava Generics - Unerwartete Grenzen

public class MyList<E extends Number> extends ArrayList<E> { 
} 

.

Nicht angenommen gebunden. Was bedeutet das? Und warum ist es falsch? Danke für die Hilfe.

public class MyList<E extends Number> extends ArrayList<E extends Number> { 

} 
+0

Können Sie bitte erklären, wann genau Sie diesen Fehler erhalten? Ist dieser Kompilierungsfehler? Oder es kommt, während diese Klasse instanziiert wird oder was? –

+0

Kompilierungsfehler – hasNoPatience

Antwort

5

class MyList<E extends Number> ist in Ordnung, weil Sie einen Typparameter deklarieren , so dass Sie ihm einen Namen geben (E) und man kann es gegebenenfalls erklären als begrenzt (extends Number).

In extends ArrayList<E> stattdessen müssen Sie nur noch einen Typparameter „Verwendung“: mit „<E>“ Sie auf den Parameter beziehen sich in Ihrer Klasse deklariert, für die ein gebundenes bereits in seiner Erklärung gegeben ist. "<? extends Number>" (mit ? anstelle von E) würde auch vom Compiler akzeptiert werden (obwohl es nicht das ist, was Sie wollen). Stattdessen wird "<E extends Number>" als Typparameterdeklaration verwendet, daher handelt es sich um einen Kompilierungsfehler.

0
public class MyList<E extends Number> extends ArrayList<E> { 
    private static final long serialVersionUID = -1025575227555594680L; 

} 

Dies sollte ohne Kompilierungsfehler und ohne Warnungen funktionieren. Lassen Sie es mich wissen, wenn Sie immer noch den gleichen Fehler haben.