Quali sono i vantaggi di utilizzare la notazione @deprecated sul solo l'interfaccia?
-
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() {
...
}
...
}
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.