• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

Interfaces και static methods

Scheduled Pinned Locked Moved Αντικειμενοστρεφής Προγραμματισμός 2
9 Posts 2 Posters 50 Views
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • it2023086I Offline
    it2023086I Offline
    it2023086
    wrote on last edited by
    #1

    Αν υποθέσουμε ότι θέλω να αναγκάσω κάποιες κλάσεις να υλοποιούν μία συγκεκριμένη static method μπορώ να χρησιμοποιήσω interfaces ή πρέπει να καταφύγω σε abstract class?

    1 Reply Last reply
    0
  • A Offline
    A Offline
    acharal
    wrote on last edited by
    #2

    Οχι τα interfaces δεν επιβάλουν static μεθόδους. Ούτε και οι abstract κλάσεις επιβάλουν - δηλαδή δεν μπορείς να έχεις abstract static ούτε να υποσκελίσεις static.

    Μήπως να μην την κάνεις static; Σου είναι απαραίτητη;

    1 Reply Last reply
    0
  • it2023086I Offline
    it2023086I Offline
    it2023086
    wrote on last edited by it2023086
    #3

    Βασικά θέλω να παίρνω το όνομα μίας κλάσης, αλλά όχι μέσα από αντικείμενο (getClass().getName()). Δηλ. Κλάση.όνομαΚλάσης() -> String. Το έχω ήδη υλοποιήσει (κάπως λάθος, αφού εγώ το δίνω το όνομα), απλώς θα θεωρούσα πιο σωστό, από την στιγμή που έχω κάνει την παραδοχή οι κλάσεις μας να το έχουν αυτό, να το επιβάλω κιόλας (πιθανώς ολόκληρο το σκεπτικό μου να είναι λάθος, αλλά όπως τα έχουμε φτιάξει τώρα χρειάζεται αυτό - βασικά θέλω την αντιστοιχία μεταξύ πχ @αυγά{3} και κάποιας κλάσης που θα χειρίζεται το string, ανάλογα με το αρχικό σύμβολο - για αυτό είχα ρωτήσει και για τα reflections, τώρα παίζω με if/switch κλπ).

    1 Reply Last reply
    0
  • A Offline
    A Offline
    acharal
    wrote on last edited by
    #4

    Αν κατάλαβα καλά λες, αν βρεις @ τότε χρησιμοποίησε αυτή την κλάση για να επεξεργαστείς το string, αν βρεις # κάποια άλλη κλάση;

    1 Reply Last reply
    0
  • it2023086I Offline
    it2023086I Offline
    it2023086
    wrote on last edited by
    #5

    Ναι σωστά. Το string "κόβεται" από άλλο τμήμα του προγράμματος, το οποίο και δίνει έτοιμη την αντιστοιχία μεταξύ των μοτίβων (πχ "@αυγά{3}", "#τηγάνι", "#σκεύος με πολλές λέξεις{}") και του "είδους" τους ("υλικό με ποσότητα", "σκεύος μίας λέξης", κλπ). Και εγώ τώρα θέλω να αντιστοιχίσω αυτά τα "είδη" σε κλάσεις (το έχω ήδη κάνει, αλλά με κάπως "άσχημο" τρόπο).

    1 Reply Last reply
    0
  • A Offline
    A Offline
    acharal
    wrote on last edited by
    #6

    Τότε μπορείς να κάνεις το εξής.

    Να ορίσεις ένα interface και διάφορες υλοποιήσεις αυτού, πχ.

    interface Processor { 
       process(String input);
    }
    

    και να χρησιμοποιήσεις ένα (ίσως static) Map<String,Processor> που να αντιστοιχεί τα γράμματα, πχ. @, # κτλ στα αντίστοιχα αντικείμενα.

    Map<String, Processor> processors;
    ...
    processors.put("@", new IngredientProcessor(....));
    ...
    
    1 Reply Last reply
    0
  • it2023086I Offline
    it2023086I Offline
    it2023086
    wrote on last edited by
    #7

    Ευχαριστώ, θα εξετάσω πως μπορώ να το χρησιμοποιήσω αυτό.

    1 Reply Last reply
    0
  • it2023086I Offline
    it2023086I Offline
    it2023086
    wrote on last edited by
    #8

    Από περιέργεια, υπάρχει τρόπος να "ορίσω" την μορφή της κατασκευάστριας μεθόδου εντός ενός interface? Δηλ. να απαιτώ όσοι υλοποιούν αυτή την διεπαφή να έχουν και έναν constructor που δέχεται πχ String.

    1 Reply Last reply
    0
  • A Offline
    A Offline
    acharal
    wrote on last edited by
    #9

    Όχι δεν γίνεται αυτό.

    1 Reply Last reply
    0

  • Login

Powered by NodeBB Contributors
  • First post
    Last post
0
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups