Warum dürfen folgende Methoden nicht gemeinsam in einer Klasse deklariert werden? WS16 1h)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Warum dürfen folgende Methoden nicht gemeinsam in einer Klasse deklariert werden? WS16 1h)
Hallo zusammen,

Integer ist eine Unterklasse von Number.
Warum dürfen folgende Methoden nicht gemeinsam in der gleichen Klasse deklariert werden?

Number methode(Comparable n)…
Integer methode(Comparable i)…

Grüße
Speedy


Weil das beides zu derselben Methode wird (Was Eingabeparameter angeht), da die Generics zur Compilezeit geprüft und dann einheitlich durch Object ersetzt werden.

Am Ende steht da quasi
Number methode(Comparable n)
Integer methode(Comparable i)

Und in Comparable sind die Generics durch Object ersetzt.


Type erasure is the notion that all generics info FROM INSTANCES is gone at runtime [the ‘String’ in List<?> x = new ArrayList();], as well as generics info being irrelevant for method signatures [void foo(List x) and void foo(List x) cannot co-exist in the same class, as they have the same classfile signature].

Siehe auch: https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.4.2


Alles klar, danke euch beiden @Destranix, @Yawkat