Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Gå fra reflection til interface


Anbefalte innlegg

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 av r2d290
Lenke til kommentar
Videoannonse
Annonse
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 av Enthroner
Lenke til kommentar

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 av r2d290
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...