Ja, aber wie macht man das??!
Ein einfacher Hinweis:
Java:public class Entity<T>{ .... }
T steht hier nicht für einen Bestimmten Typ, sondern dient einzig und allein als Platzhalter für den dort später verwendeten Konkreten und oder Abstrakten Typ.
Das hilft dir vielleicht schonmal im Ansatz weiter![]()
Was ja alleine schon totaler Schwachsinn ist, denn sonst steht ja auch kein Typ hinter dem Klassenamen. Wozu soll das also eigentlich gut sein?
denn sonst steht ja auch kein Typ hinter dem Klassenamen.
Bitte was ? Ich kann gerade glaube ich daraus nicht schließen worauf du mit dieser Aussage hinaus möchtest.
public class MeineKlasse
{
}
Die hat aber erstmal überhaupt keinen Typ. Es ist halt eine Klasse. Was hat die mit generic oder nicht zu tun?
Die hat aber erstmal überhaupt keinen Typ. Es ist halt eine Klasse. Was hat die mit generic oder nicht zu tun?
Das fängt ja schon mit den Generics an. Java war ja stolz darauf eine streng statisch typisierte Sprache zu sein. Blöd wenn man dann irgendwann feststellt, dass man damit manche Sachen einfach nicht realisiern kann und dann bastelt man halt schnell noch die Generics dazu.
Eine Klassendefinition hat für mich nichts aber auch gar nichts mit einem Typen zu tun. Eine Klasse hat niemals einen Typ. Eine Klasse ist eine Klasse.
Das totaler Schwachsinn war nicht auf Dich gemünzt, sondern meine persönliche Meinung zu der Art wie generics in Java implementiert sind. Das finde ich totalen Schwachsinn.
Eine Klassendefinition hat für mich nichts aber auch gar nichts mit einem Typen zu tun. Eine Klasse hat niemals einen Typ. Eine Klasse ist eine Klasse. Nicht mehr und nicht weniger. Ich finde eine generische Klasse ist wie ein rundes Rechteck. Das passt einfach nicht ... Aber das ist meine persönliche Meinung und millionen andere finden GEnerics in Java bestimmt ganz toll.
Was ist denn für dich ein Type? Eine Klasse hat keinen Typ meinst du, hat das Objekt einer Klasse einen Typ?
Ich frage nur nach, weil ich probieren will deine Sichtweise nachzuvollziehen![]()
Es leuchtet mir einfach nicht ein, warum ich die Quelle, also die Klasse als generisch typisieren muss, damit das Ziel (Die Methode, die Variable die das Object hält oder was auch immer) damit umgehen kann.
.... Festlegen des Typs beim Intanziieren List l = new List<String>(); ....
... Objekte des Typs ....
public class Foo{
public Foo(){}
public static <T extends Serializable> void store(T t, File f){
FileOutputStream fos;
ObjectOutputStream out;
try {
fos = new FileOutputStream(f);
out = new ObjectOutputStream(fos);
out.writeObject(t);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args){
Foo.store("StringExample", new File("H:/Apps/string.ser"));
Foo.store(4, new File("H:/Apps/int.ser"));
}
}
Diese Phrase (und die obere) sind eben das was zu beachten wäre.
Map<Integer, ArrayList<? extends Serializable>> map = new HashMap<>();
Gerade bei Listen verstehe ich die strenge Typisierung überhaupt nicht.
Was für einen Quatsch muss man denn programmieren, dass man aus versehen verschiedene Objecte in eine Liste packt? Entweder ich mache das bewußt, dann lebe ich auch mit den Konsequenzen oder ich lasse es. Aber aus versehen? Also das ist mir in über 30 Jahren in C noch nie passsiert. ....
....
Und damit man es jetzt in Java doch machen kann, muss man einen risen Aufwand treiben der syntaktisch so häßlich ist, dass es mir immer die Fußnägel aufrollt.
....
....
Da wäre ein
ArrayList<id>
doch viel eleganter und damit alles abgedeckt.
Gerade bei Listen verstehe ich die strenge Typisierung überhaupt nicht.
Lieber JavaMeister (sorry aber alleine der Nick erzeugt bei mir fürchterliche antipathie, denn selbst nach über 30 Jahren C würde ich mich nicht als CMeister titulieren und wahrscheinlich programmiere ich schon doppelt so lang wie du alt bist)
Was ja alleine schon totaler Schwachsinn ist, denn sonst steht ja auch kein Typ hinter dem Klassenamen. Wozu soll das also eigentlich gut sein?
Lieber Thallius, also für mich ist schon der erste Punkt ein ausreichender Grund, sich Generics mal zu Gemüte zu führen.Die wahre Stärke eines solchen Konstruktes wird erst deutlich, wenn du nicht jede Liste zu seinem eigentlichen Zielobjekt casten musst oder mit instance of prüfen musst, was den drin ist, um damit zu arbeiten.
Auch hilft es Fehler schon zur Compilezeit zu identifizieren und in der IDE entsprechende Empfehlungen zu geben, was eine Methode erwartet und wann.
Lieber Thallius, also für mich ist schon der erste Punkt ein ausreichender Grund, sich Generics mal zu Gemüte zu führen.
Ich habe vor 1.5 Jahren ein Projekt "generifiziert" und war positiv überrascht, wie viele instanceofs/Castings/Klammern auf einmal überflüssig wurden.
Ich habe doch nirgends gesagt das generics schlecht sind. Denn in Java hat man halt keine andere Wahl. Wer sich mal die Mühe macht über den Tellerrand von java hinaus sieht und dann feststellt wie einfach es sein kann Listen mit beliebigen Objecttypen zu implementieren wenn man eben einfach auf statische Typisierung verzichtet, dann mag man nie wieder sowas in Java implementieren.
Statische Typisierung stößt bei sowas nunmal an seine Grenzen. Um es trotzdem möglich zu machen werden dann solche vollkommen obskuren Konstrukteuren wie die java generics erfunden. .
Dabei müssten man einfach nur auf die statische Typisierung verzichten und schon ginge das mit ganz einfachen und syntaktisch und stylistisch eleganten Mitteln
Und damit auch auf alle Vorteile, die eine statische Typsierung bietet verzichten? Dann hätte man PHP, und das will niemand. Was wäre hier der Vorteil bei einer Liste?