Ich versuche, eine Anwendung zu programmieren, die auf verschiedenen Java-Plattformen wie J2SE, J2ME, Android usw. läuft. Ich weiß bereits, dass ich den größten Teil der Benutzeroberfläche für jede Plattform neu schreiben muss, aber ich möchte die Kernlogik wiederverwenden.
Die Übertragbarkeit dieses Kerns birgt drei Nachteile, die mir bekannt sind:
- Beibehaltung der alten Java 1.4-Syntax keine der schönen Sprachfunktionen von Java 5.0 zu nutzen
- nur mit externe Bibliotheken die bekanntermaßen auf diesen Plattformen funktionieren (d.h.: kein JNI verwenden und keine Abhängigkeiten zu anderen Bibliotheken haben, die diese Regeln verletzen)
- nur unter Verwendung der Klassen, die vorhanden sind auf all diesen Plattformen
Ich kenne Wege zur Überwindung (1) : Code im 5.0-Stil und automatische Konvertierung nach 1.4 ( retroweaver - Ich habe es noch nicht ausprobiert, aber es scheint in Ordnung zu sein).
Ich denke (2) ist ein Problem, das ich einfach akzeptieren muss.
Jetzt würde ich gerne wissen, was die beste Lösung ist für (3) vor allem die Sammelkurse, die ich am meisten vermisse. Ich kann an diese denken:
- Die meisten Programmierer, die ich kenne, verwenden einfach keine
Set
,Map
,List
, usw. und Rückgriff aufVector
und einfache Arrays. Ich denke, das macht den Code von vornherein hässlich. Aber ich weiß auch, dass die richtige Wahl zwischenTreeSet/Hashset
oLinkedList/ArrayList
ist entscheidend für die Leistung, und immer mitVector
und Arrays können nicht richtig sein. - Ich könnte meine eigenen Implementierungen dieser Klassen programmieren. Dies scheint das Rad neu zu erfinden, und ich denke, ich könnte es nicht so gut machen, wie andere es getan haben.
- Da Java Open Source ist, könnte ich den Quellcode des J2SE Collections Frameworks nehmen und in meine Anwendung einbauen, wenn ich sie für J2ME erstelle. Ich weiß allerdings nicht, ob das eine gute Idee ist. Vielleicht gibt es gute Gründe, dies nicht zu tun.
- Vielleicht gibt es bereits Bibliotheken, die die wichtigsten Funktionen des Collections-Frameworks nachbilden, aber für Low-End-Systeme optimiert sind, indem sie vielleicht Funktionen nicht implementieren, die nur selten genutzt werden. Kennen Sie welche?
Vielen Dank für Ihre Antworten und Meinungen!
Bearbeiten: Ich habe schließlich eine (komplexe, aber schöne) Lösung gefunden, und ich dachte, wenn ich meine eigene Antwort gebe und sie akzeptiere, würde die Lösung oben sichtbar werden. Aber das Gegenteil ist der Fall, meine Antwort steht immer noch ganz unten.