Java-äquivalent zur C# - dynamische Klassen geben?
Ich komme aus der Welt von c#.
in C# bin ich in der Lage, um die Klasse zu verwenden dynamische http://msdn.microsoft.com/en-us/library/dd264741.aspx
Dies ermöglicht es mir, nicht zu verwenden Vorlagen/generische Klassen, sondern erreichen ein simliar Gefühl für bestimmter Situationen.
Bin ich gewesen Streitereien im internet suchen, da leider 'dynamische' und 'java' keywords drehen, bis eine Menge von unzusammenhängenden Informationen, die sich auf dynamische Architekturen.
Habe ich dabbled ein bisschen in javaFX und es ist ein Typ var das zu haben scheint, die gleiche Verwendung wie c#'s dynamisch. Jedoch es doesnt erscheinen, werden in nutzbare Java.
Dank,
stephanie
- Ich bin gespannt, wie Sie es in C#. Es klingt wie Sie verwenden es, um zu entkommen statische Typsicherheit, das ist keine gute Idee in C# oder - Java.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java unterstützt keine dynamische Typisierung, aber Sie können die Simulation so etwas wie, dass die Verwendung von dynamischen Proxys in Java. Zuerst müssen Sie deklariert eine Schnittstelle Operationen, die Sie aufrufen möchten, auf Ihre Objekte:
Dann erstellen Sie den Proxy für die dynamische Aufruf auf myObjectInstance:
wo MyHandler erklärt wird, wie diese:
so, wenn myObject hat die Methoden foo() und boo(), werden Sie aufgerufen werden, oder andere, erhalten Sie eine RuntimeException.
Gibt es auch eine ganze Reihe von Sprachen, die in der JVM-Unterstützung dynamische Typisierung, z.B. Scala, Groovy, JRuby, BeanShell, JavaScript/Nashorn und viele andere. Es gibt einige JVM-änderungen kommen, die in Java 7 unterstützt eine native dynamic dispatch, so dass diese Sprachen könnte ausführen viel besser, aber eine solche Funktion nicht direkt ausgesetzt in der statisch typisierten Sprache Java.
Gibt es nichts vergleichbares in Java
Gibt es nichts gleichwertiges in Java. Die nächste Sache, die Sie tun können, deklarieren Sie eine variable vom Typ Object, aber dann haben Sie gewirkt, dass die variable auf das, was Sie erwarten sind, um zum aufrufen jeder Methode, die nicht implementiert-Objekt (oder verwenden Sie reflektion, aber das ist sloooow).
Java ist eine stark typisierte Sprache. Ich denke für die nächste version wird es einige dynamische Typisierung zu ermöglichen, sich für die Schließungen, aber das ist Nächstes Jahr wahrscheinlich 2012.
In Groovy können Sie nur nutzen "def", eine variable zu deklarieren, ohne einen Typ, und der Typ wird zur Laufzeit aufgelöst. Und kompilieren Sie den Groovy-code zu Java-bytecode...
Können Sie auch Scala-code, die nicht erforderlich ist, die explizite Typ-Deklarationen. Scala erzeugt Java-byte-code. Ich habe nicht verwendet C#, so dass ich fürchte, ich kann nicht nehmen Sie dieses Kommentar auf den Punkt reagiert direkt auf die Frage. Vielleicht kann jemand anders ergänzen.