r2d290 Skrevet 9. mai 2016 Del Skrevet 9. mai 2016 (endret) Hallo Jobber med et program som jeg har fått beskjed om at bør forandres litt. Det bruker reflection med tomme konstruktører, og jeg har forstått det sånn at det er en dårlig og treg løsning, og at man heller bør bruke interface plugin. Litt ustø på dette, så lurte på om dere kunne bidra litt til hvordan å gå frem. EditorStart.java [...] public class EditorStart extends Plugin{ public EditorStart() { } public EditorStart(String conf) { } public EditorStart(String conf, Service service) { } [..] } PluginControl.java [...] try { Class pluginclass = Class.forName(className); Class[] constructor = new Class[2]; constructor[0] = String.class; constructor[1] = Service.class; // Find constructor with one String and one ServiceLocator as argument Constructor cons = pluginclass.getConstructor(constructor); Object[] values = new Object[2]; values[0] = props.getIniDir(); values[1] = this.locator; // Call found constructor editor = (Plugin) cons.newInstance(values); } catch (Exception e) { throw new theException(e, Messages.EDITOR_START_FAILURE); } [...] Endret 10. mai 2016 av r2d290 Lenke til kommentar
Enthroner Skrevet 9. mai 2016 Del Skrevet 9. mai 2016 (endret) public abstract class PluginContract { //maybe add configure(String conf) too? abstract void configure(String conf, Service service); } public class EditorStart extends PluginContract { @Override void configure(String conf, Service service) { //... } } public class EditorWhatever extends PluginContract { @Override void configure(String conf, Service service) { //... } } public class PluginControl { void doSomethingWithAPlugin(PluginContract plugin){ plugin.configure(props.getIniDir(), this.locator); } } Noe slikt? Her kan du kalle enten pluginControl.doSomethingWithAPlugin(new EditorStart()); eller pluginControl.doSomethingWithAPlugin(new EditorWhatever()); Endret 9. mai 2016 av Enthroner Lenke til kommentar
r2d290 Skrevet 10. mai 2016 Forfatter Del Skrevet 10. mai 2016 (endret) Takker =) Skal se litt på det og se hva jeg kommer frem til. Edit: Men er dette interface? Skal ikke interface starte med "public interface PluginContract", også de som bruker interface skal implementere og ikke extende? Hva er isåfall den beste løsningen mellom bruk av interface vs. abstract class her? Endret 10. mai 2016 av r2d290 Lenke til kommentar
Enthroner Skrevet 10. mai 2016 Del Skrevet 10. mai 2016 Interface er best sålenge du er sikker på at du ikke trenger felles logikk for alle som oppfyller kontrakten. Det er et fint tema for litt googling også kan du gjøre opp din egen mening http://stackoverflow.com/questions/10040069/abstract-class-vs-interface-in-java Lenke til kommentar
r2d290 Skrevet 10. mai 2016 Forfatter Del Skrevet 10. mai 2016 Takk igjen. Har fått litt å se på nå. 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å