Bitte beachten Sie, dass dies kein Java vs. C # -Argument ist. Ich bin ein Java-Programmierer ohne C # -Erfahrung, der nur aus Neugier fragt.
Ich habe etwas über C # gelesen und es scheint, dass es viel mehr Funktionen als Java hat. Einige Beispiele:
- Inferenz eingeben.
dynamic
Stichwort.- Delegierte.
- Optionale Parameter.
- Lambda und LINQ (ich habe eigentlich keine Ahnung, was das sind).
- Eigenschaften.
Java bietet jedoch nichts, was C # nicht bietet.
Meine Frage ist: Warum hat C # wesentlich mehr native Funktionen als Java? Und warum hat Java im Laufe der Jahre einige davon nicht hinzugefügt, zum Beispiel Eigenschaften oder Typinferenz? Gehen die Java-Sprachdesigner simpler vor? Was ist der Grund dafür?
Antworten:
Mehrere Gründe:
Das Ergebnis ist, dass Java jetzt eine gewisse Funktionslücke aufweist. Es hat große Pläne für die Zukunft, aber wie immer dauert alles ein bisschen länger als geplant.
quelle
Ich möchte Kilians Antwort hinzufügen, dass ein großer Unterschied zwischen Java und C # darin besteht, dass C # -Designer nicht nur die Sprache, sondern auch die Standard-IDE steuern.
Das Hinzufügen von Erweiterungsmethoden und Teilklassen kann ein Albtraum bei der Versionsverwaltung sein, wenn die IDEs dies nicht ordnungsgemäß unterstützen.
Da erwartet wird, dass Sie Java mit der Plattform Ihrer Wahl (Eclipse, Netbeans, vi + Ant) kompilieren können, ist das Hinzufügen von Funktionen, die den Code beschädigen (und das Entwickeln zusätzlicher Erweiterungen wie LINQ), weitaus komplizierter als " Da IntelliSense sich mit diesen Fällen befasst, müssen wir uns keine Sorgen machen. "
Manchmal lohnt es sich auch, den Wert der Features anstelle der Anzahl zu notieren. Zum Beispiel sind automatische Eigenschaften nett und ich wünsche mir auf jeden Fall, dass Java dies unterstützt, aber am Ende bedeutet dies nur, dass Sie noch ein paar Codezeilen in Java schreiben müssen. In ähnlicher Weise empfinde ich das Aufrufen von "Events" als eine Art Fehlbezeichnung, da es sich nur um speziell gekennzeichnete Stellvertreter handelt und nur um eine verfeinerte Kopie des Observer-Musters, das bereits von Java verwendet wird (in Java ist dies wiederum expliziter erforderlich) Kodierung)
Verstehen Sie mich nicht falsch, ich denke, C # hat einige bemerkenswerte Neuerungen eingeführt, und ich wünsche mir, dass eines Tages große Oracle-Bosse aufwachen und ein echtes "Java 2" starten, um einige davon einzuschließen, aber die Lücke ist nicht so offensichtlich wie Ihre Fragenpunkte.
quelle