Interfacce mobili ma non classi concrete

0

Recentemente ho iniziato a lavorare sulla creazione di una libreria client. Un problema che sto affrontando ora è che devo spostare l'interfaccia sottostante Attributes nella libreria client, ma le classi concrete (business logic) dovrebbero rimanere nella libreria originale. Il problema qui è che le firme del metodo dell'interfaccia sottostante sono le classi Concrete.

   public interface Attributes {

      public Integer getAttribute(IntegerAttr attr);

      public Boolean getAttribute(BooleanAttr attr);

      public String getAttribute(StringAttr attr);

      // some more code.
  }

Ciascuna delle classi di parametri precedenti implementa un'interfaccia comune chiamata Attr .

class IntegerAttr implements Attr { .. }
class BooleanAttr implements Attr { .. }
...

Ora, se provo a impostare i parametri per digitare Attr nell'interfaccia Attributes , otterremo l'eccezione Override a causa della stessa firma del metodo.

Ma devo spostare questa interfaccia nella libreria client ma non nelle classi concrete.

Qualsiasi suggerimento su questo per favore.

    
posta Amarnath 26.08.2017 - 15:27
fonte

1 risposta

3

Beh, sarebbe più facile rispondere se ci aveste detto cosa stavate cercando di realizzare (per esempio, perché spostate l'interfaccia), ma ovunque.

Un approccio diretto funziona come segue:

  1. Crea interfacce IIntegerAttr , IBooleanAttr e IStringAttr , tutte derivate da Attr .

  2. Crea IntegerAttr deriva da IIntegerAttr (e gli altri due in modo analogo).

  3. Cambia la firma dei metodi getAttribute per utilizzare le nuove interfacce.

Ora puoi spostare Attributes e le nuove interfacce nella libreria client, senza dover spostare le classi concrete IntegerAttr , ....

    
risposta data 26.08.2017 - 16:07
fonte