Wieso kompiliert dieser Code nicht?

EIDI-Crashkurs 2020 Wieso kompiliert dieser Code nicht?

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
  • Autor
    Beiträge
  • #3370 Antworten
    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 🙂

    #3371 Antworten

    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 Methode m einen String erwartet und auch einen String zurückgibt. Das wäre richtig, wenn die Methode nicht static 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 mittels Foo.m(...). Nun fehlt der Typparameter. Man könnte argumentieren, dass man den Typparameter ja angeben könnte, beispielsweise mittels Foo<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 Typparameter R ein (könnte auch anders heißen, hat nichts mit dem R aus Foo<R> zu tun, dieses R wäre dann überflüssig).

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
Antwort auf: Antwort #3371 in Wieso kompiliert dieser Code nicht?

Deine Nachricht und Pseudonym (Name) sind für alle einsehbar (Datenschutz).

Deine Information: