2012-05-15 5 views
5

So che in Java, qualcuno può includere le costanti all'interno delle interfacce dichiarandole public static final. Tuttavia, supponiamo di avere un'interfaccia di questo tipo, denominata I, che contiene solo costanti finali statiche pubbliche e nessuna firma di metodo e una classe denominata C. Perché dovrei implementare I in C? vale a dire perché dovrei fare quanto segue:Che cosa significa definire le costanti in un'interfaccia?

public class C implements I

Dal momento che le costanti sono pubblici e statico, non dovrei essere in grado di accedervi direttamente tramite I?

risposta

10

Questo pattern (anti-) è utile perché consente di utilizzare i nomi di tali costanti senza doverli prefissare con I.. Questa era una tecnica comune, ma ora è possibile utilizzare lo import static per importare le costanti allo stesso modo in cui è caduto in disgrazia. Uno dei motivi per evitarlo è che l'insieme delle costanti non è in realtà un'interfaccia - è solo un mucchio di valori - e che lo rende un interfaccia consente di fare cose bizzarre come scrivere

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface; 

o

if (m instanceof ConstantInterfaceWithNoMethods) 

che proprio non hanno senso in questo contesto.

Spero che questo aiuti!

+0

Grazie mille per la spiegazione! Accetterò questa risposta il prima possibile :) –

0

Generalmente non è necessario. Un motivo potrebbe essere che l'interfaccia I è una "interfaccia marker".

+0

Che cos'è una "interfaccia marker"? –

+1

È un'interfaccia senza alcun metodo. Non sono sicuro di come questa risposta si riferisca alla domanda dell'OP, però. –

+1

@ NathanSabruka- Un'interfaccia marcatore è un'interfaccia come 'Serializable' che non ha metodi in esso e serve proprio come un" marker "che una classe ha qualche proprietà. Dall'introduzione delle annotazioni, anche loro sono caduti in disgrazia. – templatetypedef

5

Questo è un modello Java che consente di accedere a costanti dall'interfaccia senza digitare il nome dell'interfaccia più e più volte. Il modello è in circolazione sin dai primi giorni, molti anni prima che gli enum s facessero strada nella lingua.

Alcuni lo considerano discutibile, perché porta alla creazione di interfacce che non specificano un contratto.