Potrebbe cambiare il tipo di ritorno da vuoto a stringa introdurre modifiche di rottura?

1

Questo SDK ha un'interfaccia come questa:

public interface Contract {
     void update(..);
     void action(..);
     void delete(..);
}

Ora, dobbiamo cambiarlo in qualcosa di simile:

public interface Contract {
     String update(..);
     String action(..);
     String delete(..);
}

L'interfaccia è implementata internamente dall'SDK; questo non è un problema. L'ambito della domanda è al di là del caso in cui qualcuno ha implementato questa interfaccia anche al di fuori dell'SDK.

Questa modifica introduce una svolta?

    
posta rnrneverdies 29.07.2015 - 18:51
fonte

2 risposte

6

Se cambi l'interfaccia solo come descritto qui, allora sì stai infrangendo il codice. Perché ogni implementazione dell'interfaccia deve ora restituire una stringa, e prima della modifica nessuna di esse lo fa.

Supponendo che ogni implementatore effettivamente restituisca una stringa, allora no, questo non può infrangere il codice perché nessun chiamante di nessuno di questi metodi utilizza il valore restituito.

Un'eccezione oscura: se usi la riflessione, ciò potrebbe rompere le cose. Perché il tuo codice di riflessione potrebbe ancora cercare i metodi di restituzione nulli.

    
risposta data 29.07.2015 - 19:06
fonte
4

È possibile. I clienti esistenti "classici" non si aspettano che venga restituito un valore, quindi ignorerebbero semplicemente la stringa restituita. Per "classico", intendo qualcosa del genere:

public void DoSomething(Contract contract)
{
    contract.update();
    contract.delete();
}

Ora, c'è una possibilità che ci sia qualche funzionalità in Java che si aspetta che un metodo abbia un valore di ritorno void . Credo che ci siano chiamate correlate al thread in C # che richiedono metodi per restituire void . Qualcosa del genere potrebbe esistere anche in Java. Questo potrebbe potenzialmente rompere qualcosa.

Le implementazioni esistenti dovranno essere aggiornate per implementare la nuova interfaccia. Tuttavia, se questo fa parte di una libreria di terze parti, in cui solo tu fornisci le implementazioni, i consumatori della libreria non saranno interessati.

Tuttavia, cambiando la stringa in, ad esempio, Error (o qualsiasi altro tipo) sarebbe considerato una rottura.

    
risposta data 29.07.2015 - 19:06
fonte

Leggi altre domande sui tag