kostenloser Webspace werbefrei: lima-city


spitze Klammern hinter Klassen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    meinkleinergruenerkaktus

    meinkleinergruenerkaktus hat kostenlosen Webspace.

    Hallo liebe Leute,

    ich habe mich nun schon längere Zeit nicht mit Java beschäftigt und sehe nun in der Dokumentation so eckige Klammern hinter den Klassennamen, beispielsweise Map<K,V>.
    was bitte schön hat das zu bedeuten????

    schon mal vielen dank für die Antworten
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Das sind Typen Definitionen. Es handelt sich bei einer Map zum Beispiel um ein Container. Dieser kann mit verschiedenen Datentypen gefüllt werden. Daher gibst du den Typen in den spitzen Kammern an, um dem Template zu sagen, welchen Typ du willst.

    Notfalls Google mal nach "Template"

    Liebe Grüße
  4. Hi,

    als kleine Ergänzung zum Vorredner: Es handelt sich um sog."Generics". In deinem Beispiel Map<K,V> wären also die Typen für Key und Value anzugeben wie z.B. Map<Integer, String>. Der Sinn des Ganzen ist "Typensichere Programmierung". Damit kann bereits der Compiler Typfehler erkennen.

    Gruß
  5. marmot schrieb:
    als kleine Ergänzung zum Vorredner: Es handelt sich um sog."Generics".

    Richtig. In C++ heißen sie Templates und in Java Generics (und ja, es gibt Unterschiede zwischen den beiden Sachen)

    Der Sinn des Ganzen ist "Typensichere Programmierung". Damit kann bereits der Compiler Typfehler erkennen.

    Da muss ich widersprechen. Der Sinn des ganzen ist es tendentiell typunhängigen Code zu haben. Map<> ist hier ein schönes Beispiel. Es ist im Prinzip egal, was in der Map drin steht. Ohne Generics müsste man aber für jede Kombination von Schlüsseltyp und Werttyp eine eigene Klasse definieren, die im Prinzip genau das gleiche macht wie alle anderen Maps mit anderen Typen. Generics ermöglichen daher in erster Line Generische Programmierung.

    Die Typsicherheit hat mit Generics eher wenig zu tun. Sie ist bereits durch andere Dinge in der Sprache gewährleistet.
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    bladehunter schrieb:
    Die Typsicherheit hat mit Generics eher wenig zu tun.
    Könnte man das nicht auch als Typensicherheit »interpretieren«? Weil ohne Generics kann man (so wie das auch bevor es Generics gab gemacht wurde) alles als Object verwenden und entsprechend casten…

    // EDIT:
    Ja, so steht es sogar auf der Java-Seite:
    http://docs.oracle.com/javase/1.5.0/docs/guide/language/index.html:
    Generics - This long-awaited enhancement to the type system allows a type or method to operate on objects of various types while providing compile-time type safety.


    Beitrag zuletzt geändert: 13.5.2013 21:59:41 von hackyourlife
  7. Hi,

    bladehunter schrieb:
    Generics ermöglichen daher in erster Line Generische Programmierung.
    Die Typsicherheit hat mit Generics eher wenig zu tun. Sie ist bereits durch andere Dinge in der Sprache gewährleistet.
    ich denke zwar, dass diese Diskussion für den vorliegenden Rahmen etwas weit geht aber im von dir verlinkten Artikel heißt es:
    bei denen sich der Typ einer Variable zur Laufzeit ändern darf
    Genau dies ist aber durch Generics ausgeschlossen, da ja explizit ein Typ vorgegeben wird. Ich denke zwar hier ist das Richtige gemeint, aber wohl missverständlich ausgedrückt. Weiter heißt es
    Wesentlich bei der generischen Programmierung ist, dass die Algorithmen nicht für einen bestimmten Datentyp geschrieben werden,
    Wie bereits im vorherigen post erwähnt ließe sich dies aber auch dadurch erreichen, dass Algorithmen den allgemeinen Datentyp Object verarbeiten, eine Festlegung im Quellcode wäre damit entbehrlich.

    Die von dir vorgetragene Sichtweise, dass über Generics die Programmiersprache an Universalität gewinnt ist mir nicht unbekannt, allerdings ist tatsächlich gerade das Gegenteil der Fall: Über Generics wird die Verwendbarkeit der Funktion zur Compilezeit eingeschränkt.

    Aber wie bereits angeduetet wird das nun schon fast philosopisch.

    Gruß
  8. hackyourlife schrieb:
    Weil ohne Generics kann man (so wie das auch bevor es Generics gab gemacht wurde) alles als Object verwenden

    Guter Einwand. Mir war bisher nicht bekannt, wie die Leute es in der Vor-Generics-Zeit gemacht haben. Ich hatte in dem Moment auch völlig vergessen, dass alle Klassen von Object erben. Ich bin eher davon ausgegangen, dass sie meistens keinen typunabhängigen Code geschrieben haben sondern spezialisieren Code. Also ein Irrtum meinerseits.

    marmot schrieb:
    ich denke zwar, dass diese Diskussion für den vorliegenden Rahmen etwas weit geht aber im von dir verlinkten Artikel heißt es:
    bei denen sich der Typ einer Variable zur Laufzeit ändern darf

    Das Zitat ist unvollständig:

    so gestalten sich dynamische Programmiersprachen, bei denen sich der Typ einer Variable zur Laufzeit ändern darf, durch ihre verallgemeinerte Polymorphie generisch.

    Java ist keine dynamische Programmiersprache.


    Genau dies [die Veränderung des Typs zur Laufzeit] ist aber durch Generics ausgeschlossen, da ja explizit ein Typ vorgegeben wird.

    Im Fall von Java: Jein. Der Java-Compiler checkt das nur zur Compilezeit. Was mit den Typen zur Laufzeit passiert, hängt völlig von der JVM ab. Und die JVM weiß nichts von Generics. Siehe dazu: http://stackoverflow.com/questions/520527/why-do-some-claim-that-javas-implementation-of-generics-is-bad


    Ich denke zwar hier ist das Richtige gemeint, aber wohl missverständlich ausgedrückt. Weiter heißt es
    Wesentlich bei der generischen Programmierung ist, dass die Algorithmen nicht für einen bestimmten Datentyp geschrieben werden,
    Wie bereits im vorherigen post erwähnt ließe sich dies aber auch dadurch erreichen, dass Algorithmen den allgemeinen Datentyp Object verarbeiten, eine Festlegung im Quellcode wäre damit entbehrlich.

    Richtig. Ich hatte vor ein paar Posts völlig vergessen, dass alle Klassen von Object erben. Wobei man in Java immer noch das Problem hat, dass man native Datentypen wie int und float nicht als Generics-Parameter verwenden kann.

    Beitrag zuletzt geändert: 15.5.2013 0:22:49 von bladehunter
  9. Autor dieses Themas

    meinkleinergruenerkaktus

    meinkleinergruenerkaktus hat kostenlosen Webspace.

    Ich danke euch allen für die lebhafte diskussion des themas,
    hätte gar nicht gedacht, dass das so tief geht, aber ich denke, ich sehe jetzt klarer, worum es geht;
    die anwendung jedenfalls scheint denkbar einfach: wunschtyp in die klammern schreiben und fertig...

    vielen dank & grüße
    ws
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!