EIDI-Crashkurs 2020 › Wieso kompiliert dieser Code nicht?
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 8 Monaten von Stefan Berktold.
-
AutorBeiträge
-
Sandy
Hallo Stefan, ich habe eine Frage zu der Teilaufgabe 63 U auf Seite 81. könntest du das vielleicht nochmal genauer erklären wieso der Code da nicht kompiliert?
Wäre super hilfreich, danke schonmal 🙂
Das liegt daran, dass generische Typen nur in einem objektorientierten Kontext benutzt werden können. Erzeugt man beispielsweise ein
Foo<String>
Objekt, so wäre klar, dass die Methodem
einenString
erwartet und auch einenString
zurückgibt. Das wäre richtig, wenn die Methode nichtstatic
wäre. Statische Methoden müssen aber nicht auf einem Objekt aufgerufen werden. Man ruft sie i. d. R. über den Klassennamen auf, also hier mittelsFoo.m(...)
. Nun fehlt der Typparameter. Man könnte argumentieren, dass man den Typparameter ja angeben könnte, beispielsweise mittelsFoo<String>.m(...)
. Das ist richtig, trotzdem funktioniert es bei statischen Methoden nicht. Warum genau das nicht funktioniert kann ich dir nicht sagen – eventuell hat man sich einfach dafür entschieden (weil meiner Meinung nach könnte es theoretisch auch möglich sein).Für dich heißt das, dass du dir einfach merkst, dass man generische Typen nicht in einem statischen Kontext benutzen kann. Möchte man das, so benötigt man eine generische Methode. Man müsste hier also
public static <R> R m(R r)
schreiben. Das<R>
führt den neuen TypparameterR
ein (könnte auch anders heißen, hat nichts mit demR
ausFoo<R>
zu tun, dieses R wäre dann überflüssig). -
AutorBeiträge