Quali sono i vantaggi di utilizzare la notazione @deprecated sul solo l'interfaccia?

StackOverflow https://stackoverflow.com/questions/1267845

  •  13-09-2019
  •  | 
  •  

Domanda

Per la programmazione Java, quali sono alcuni vantaggi di utilizzare la notazione @deprecated su e metodo di interfaccia, ma non sulla classe che lo implementa?

public interface Joe {

    @Deprecated
    public void doSomething();

    ...
}

public final class Joseph implements Joe {

    public void doSomething() {
       ...
    }

    ...
}
È stato utile?

Soluzione

Credo che sia una lacuna nel linguaggio Java stesso e non ha senso specificare un metodo in un'interfaccia come deprecato attraverso un'annotazione e non ha il metodo considerato deprecato nella classe di esecuzione.

Sarebbe meglio se la @ deprecato-ness del metodo sono stati ereditati. Purtroppo, sembra che Java non supporta questo.

Si consideri come utensili, come ad esempio un IDE, considera questa situazione: se il tipo di una variabile è dichiarata per essere l'interfaccia, quindi i metodi @deprecated possono essere resi con uno sciopero attraverso. Ma se il tipo di una variabile viene dichiarata la classe che implementa e la firma di classe non include @deprecated, allora il metodo sarà reso senza uno sciopero attraverso.

La domanda fondamentale è: cosa significa per un metodo da sconsigliata a un'interfaccia ma non in una classe di applicazione (o in un'interfaccia estendentesi)? L'unica intenzione è ragionevole per il metodo da deprecato per ogni cosa sotto l'interfaccia nella gerarchia delle classi. Ma il linguaggio non supporta tale comportamento.

Altri suggerimenti

@deprecated è la documentazione. Se la gente di codice per l'interfaccia è possibile contrassegnare alcuni aspetti di tale interfaccia come deprecato. In questo modo le persone sanno di non usarlo.

La classe di implementazione dell'interfaccia è un dettaglio. Procedimento in quella classe accade per soddisfare l'interfaccia, ma non potrebbe essere sconsigliato da solo. Deprecando che il metodo può o non può essere appropriato.

La creazione di una nuova classe che implementa un'interfaccia significa che è necessario implementare i metodi deprecati. Essi dovrebbero probabilmente funzionerà a meno che non si sa che i clienti della classe non usano i metodi deprecati. Ad esempio, se si sta creando un contenitore di servlet HTTP è necessario implementare il metodo HttpServletResponse.encodeUrl() anche se è sconsigliato a favore encodeURL(). Questo perché un utente della vostra classe può chiamare quel metodo deprecato.

a mio parere è controversa : un'interfaccia metodo deprecato non dovrebbe non essere utilizzato indipendentemente la sua implementazione (si prega di fornire controesempi se non)

Se vogliamo refactoring del codice esistente con metodi inadeguati nell'interfaccia e nella realizzazione, allora possiamo usare @Deprecated nei metodi di interfaccia a favore di nuovi metodi puliti temporaneamente per alcuni rilasci. Essa può essere brutto, solo per mantenere il codice compatibile possiamo fare uso di esso. Questo mostrerà nella relazione IDE e SONAR che il suo un metodo deprecato e costringendo i clienti a utilizzare nuovi metodi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top