Interfaces και static methods
-
Βασικά θέλω να παίρνω το όνομα μίας κλάσης, αλλά όχι μέσα από αντικείμενο (getClass().getName()). Δηλ. Κλάση.όνομαΚλάσης() -> String. Το έχω ήδη υλοποιήσει (κάπως λάθος, αφού εγώ το δίνω το όνομα), απλώς θα θεωρούσα πιο σωστό, από την στιγμή που έχω κάνει την παραδοχή οι κλάσεις μας να το έχουν αυτό, να το επιβάλω κιόλας (πιθανώς ολόκληρο το σκεπτικό μου να είναι λάθος, αλλά όπως τα έχουμε φτιάξει τώρα χρειάζεται αυτό - βασικά θέλω την αντιστοιχία μεταξύ πχ @αυγά{3} και κάποιας κλάσης που θα χειρίζεται το string, ανάλογα με το αρχικό σύμβολο - για αυτό είχα ρωτήσει και για τα reflections, τώρα παίζω με if/switch κλπ).
-
Ναι σωστά. Το string "κόβεται" από άλλο τμήμα του προγράμματος, το οποίο και δίνει έτοιμη την αντιστοιχία μεταξύ των μοτίβων (πχ "@αυγά{3}", "#τηγάνι", "#σκεύος με πολλές λέξεις{}") και του "είδους" τους ("υλικό με ποσότητα", "σκεύος μίας λέξης", κλπ). Και εγώ τώρα θέλω να αντιστοιχίσω αυτά τα "είδη" σε κλάσεις (το έχω ήδη κάνει, αλλά με κάπως "άσχημο" τρόπο).
-
Τότε μπορείς να κάνεις το εξής.
Να ορίσεις ένα interface και διάφορες υλοποιήσεις αυτού, πχ.
interface Processor { process(String input); }
και να χρησιμοποιήσεις ένα (ίσως static)
Map<String,Processor>
που να αντιστοιχεί τα γράμματα, πχ.@
,#
κτλ στα αντίστοιχα αντικείμενα.Map<String, Processor> processors; ... processors.put("@", new IngredientProcessor(....)); ...