Ein " Haufen Pollution " , wie in Nicht-Reifiable Typen (Die Java ™ Tutorials> die Java - Sprache> Generics Learning (Aktualisiert)) Warum heißt es so?
Ich habe auf dieser Site mehrere Posts gesehen, die Javas Implementierung von Generika verurteilen. Jetzt kann ich ehrlich sagen, dass ich keine Probleme damit hatte, sie zu benutzen. Ich habe jedoch nicht versucht, selbst eine generische Klasse zu erstellen. Was sind Ihre Probleme mit Javas generischem Support?
In letzter Zeit habe ich es mir zur Gewohnheit gemacht, Java-Sammlungen mit menschlichen Klassennamen zu "maskieren". Einige einfache Beispiele: // Facade class that makes code more readable and understandable. public class WidgetCache extends Map<String, Widget> { } Oder: // If you saw a ArrayList<ArrayList<?>> being passed around in the code, …
Beim Überprüfen von Code habe ich festgestellt, dass die Möglichkeit besteht, ihn auf die Verwendung von Generika umzustellen. Der (verschleierte) Code sieht folgendermaßen aus: public void DoAllTheThings(Type typeOfTarget, object[] possibleTargets) { var someProperty = typeOfTarget.GetProperty(possibleTargets[0]); ... } Dieser Code könnte durch Generika ersetzt werden: public void DoAllTheThings<T>(object[] possibleTargets[0]) { var …
Zum Beispiel habe ich ein Spiel, das einige Werkzeuge hat, um die Fähigkeit des Spielers zu erhöhen: Tool.h class Tool{ public: std::string name; }; Und einige Tools: Schwert.h class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; Shield.h class Shield : public Tool{ public: Shield(){ this->name="Shield"; } …
Es ist allgemein anerkannt, dass Java-Generika auf einige wichtige Arten versagt haben. Die Kombination von Platzhaltern und Schranken führte zu ernsthaft unlesbarem Code. Wenn ich mir jedoch andere Sprachen anschaue, kann ich anscheinend kein generisches Typsystem finden, mit dem Programmierer zufrieden sind. Nehmen wir als Entwurfsziele eines solchen Typsystems: Erzeugt …
Nehmen wir an, ich habe zwei Klassen, die so aussehen (der erste Codeblock und das allgemeine Problem beziehen sich auf C #): class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } Diese Klassen können in keiner Weise …
Ich habe offenbar ein Missverständnis über den Unterschied zwischen <Foo>und <? extends Foo>. Nach meinem Verständnis, wenn wir hatten ArrayList<Foo> foos = new ArrayList<>(); Dies zeigt an, dass Foodieser Array-Liste Objekte vom Typ hinzugefügt werden können. Da Unterklassen von Fooebenfalls vom Typ sind Foo, können sie auch fehlerfrei hinzugefügt werden, …
Ich kann mich nicht erinnern, wann ich das letzte Mal einen Sammelkurs geschrieben habe. Jedes Mal, wenn ich denke, ich brauche es, nachdem ich nachgedacht habe, komme ich zu dem Schluss, dass ich es nicht tue. Die zweite Antwort auf diese Frage veranlasste mich zur Klärung (da ich noch keinen …
AFAIK, meine Klasse extendsElternklassen und implementsSchnittstellen. Aber ich stoße auf eine Situation, die ich nicht nutzen kann implements SomeInterface. Es ist die Deklaration eines generischen Typs. Beispielsweise: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD, won't work! extends ArrayList<T> Hier ist das Verwenden implementssyntaktisch verboten. Ich …
Ich wohne in einer Umgebung, in der die Leute glauben: Java-Generika sind die Funktion, die ausschließlich für das Schreiben von Bibliotheken und nicht für die eigentliche Codierung verwendet wird. C ++ ist eine OO-Programmiersprache. templateist eine optionale und vermeidbare Funktion Diese Menschen sind jedoch sehr auf die Bibliotheken angewiesen, die …
In C # -Generika können wir eine Einschränkung für einen Typparameter deklarieren T, um einen Standardkonstruktor zu haben, indem wir sagen where T : new(). Es sind jedoch keine anderen Arten von Einschränkungen wie diese gültig - new(string)zum Beispiel usw. Was ist der Grund aus Sicht des Sprachdesigns und / …
Angenommen, ich habe diese Klassenhierarchie ... public abstract class Animal { public abstract void eat(); public abstract void talk(); } class Dog extends Animal { @Override public void eat() { } @Override public void talk() { } } class Cat extends Animal { @Override public void eat() { } @Override …
Ich bin mir ziemlich sicher, dass jeder mit allgemeinen Methoden der Form vertraut ist: T DoSomething<T>(T item) Diese Funktion wird auch als parametrisch polymorph (PP) bezeichnet, insbesondere als PP mit Rang 1 . Nehmen wir an, diese Methode kann mit einem Funktionsobjekt der Form dargestellt werden: <T> : T -> …
Dies ist die Frage aus Sicht der Compiler-Interna. Ich interessiere mich für Generika, nicht für Vorlagen (C ++), daher habe ich die Frage mit C # markiert. Nicht Java, da AFAIK die Generika in beiden Sprachen in Implementierungen unterscheiden. Wenn ich mir Sprachen ohne Generika anschaue, ist das ziemlich einfach. …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.