x871kx6167ss7 Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 Hai. Leter etter en mer elegant måte og gjøre dette på. Sånn det er nå fungerer det helt fint, men jeg synes det ser litt stygt ut. Er usikker på om det i det hele tatt er noen penere måte å gjøre det på, men kan jo være... Eneste "kravet" er at det må være en del av SE 6 (og se penere ut..). Har en del sånne her deklarasjoner, og alle er på samme form. final private Action etFintNavn = new Action() { void run(String [] args) { //kode } }; Det optimale hadde jo vært vært en lispmarko, men er egentlig på utkikk etter hva som helst. Klikk for å se/fjerne innholdet nedenfor (defmacro make-action (name &body body) `(final private Action ,name = new Action() { void run(String [] args) { ,@body } };)) - Peter Lenke til kommentar
LostOblivion Skrevet 11. februar 2009 Del Skrevet 11. februar 2009 Dette finnes ikke i Java, men hvis du sier i hvilken sammenheng dette henger sammen med så kanskje vi kan gi deg et annet fornuftig svar. Hvis det er eventlisteners det er snakk om så kan du jo lage en listenersubklasse og så sjekke kilden til eventet. Da får du mer struktur på det, i stedet for å lage en anonym listener for hvert event. defListener = new DefaultListener(); JButton knapp = new JButton("Trykk meg"); knapp.addActionListener(defListener); ... class DefaultListener extends ActionListener { public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == knapp) // TODO } } Lenke til kommentar
x871kx6167ss7 Skrevet 11. februar 2009 Forfatter Del Skrevet 11. februar 2009 (endret) Jeg holder på med en oppgave hvor vi skal lage et kommandolinje-styrt program. Jeg har en HashMap<String, Action>, så når brukeren skriver inn en linje så splittes den. Første element i listen brukes til å slå opp i HashMapet etter action-objektet, mens de resterende elementene er argumentene. Kort eksempel: linjen "ls *" splittes til {"ls", "*"}. Action a = actions.get("ls"); a.run({"*"}); Jeg har derfor et Action-objekt for hver av kommandoene i programmet. Endret 11. februar 2009 av Blackslash Lenke til kommentar
Cyberfrog Skrevet 11. februar 2009 Del Skrevet 11. februar 2009 Java har javax.swing.Action (relatert til GUI), men det kan ikke være den klassen det er snakk om. Med den tilgjengelige informasjonen ser det ut som om det kunne være hensiktsmessig å bruke en kontrakt (Interface) som definerer run. Info: http://java.sun.com/docs/books/tutorial/ja.../interface.html http://java.sun.com/docs/books/tutorial/ja...einterface.html I noen tilfeller kunne man tenke seg å bruke en abstrakt klasse med en abstrakt metode run. Info: http://java.sun.com/docs/books/tutorial/ja...I/abstract.html Siste link har også litt om forskjellene mellom disse fremgangsmåtene. En evt. gevinst kan dog være vanskelig å få øye på, særlig når du allerede har noe som funker. Forøvrig har man design patterns - et av dem er Command Pattern. Men det blir muligens overkill. Lenke til kommentar
x871kx6167ss7 Skrevet 11. februar 2009 Forfatter Del Skrevet 11. februar 2009 Du har rett i at det ikke er javax.swing.Action. Har ikke drevet med GUI-programmering, så har ikke vært borti noe av det. Sånn som det er nå, så er Action-klassen min abstrakt. Har hørt om Command Pattern, men aldri sett på det. Ser ut som det er litt overkill, og jeg er jo egentlig bare ute etter noe kosmetisk. Men takk for svar. liten digresjon: Klikk for å se/fjerne innholdet nedenfor Har vist en tendens til å finne opp java-ting på nytt, for noen uker siden lagde jeg interfacet interface CompareAble<E> { int compareTo(E e); } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå