2012-05-15 21 views
5

Sé que en Java, alguien puede incluir constantes dentro de las interfaces declarándolas public static final. Sin embargo, supongamos que tengo dicha interfaz, llamada I, que contiene solo constantes finales estáticas públicas y sin firmas de métodos, y una clase llamada C. ¿Por qué querría implementar I en C? es decir, ¿por qué debería hacer lo siguiente:¿Qué significa definir constantes en una interfaz?

public class C implements I

Dado que las constantes son públicos y estático, no iba a ser capaz de acceder a ellos directamente a través I?

Respuesta

10

Este patrón (anti-) es útil porque le permite usar los nombres de esas constantes sin tener que prefijarlas con I.. Esta solía ser una técnica común, pero ahora puedes usar import static para importar las constantes de la misma manera que ha caído en desgracia. Una de las razones para evitar es que el conjunto de constantes realmente no es una interfaz - es sólo un montón de valores - y por lo que es una interfaz te permite hacer cosas extrañas como escribir

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface; 

o

if (m instanceof ConstantInterfaceWithNoMethods) 

que simplemente no tienen sentido en este contexto.

Espero que esto ayude!

+0

¡Muchas gracias por la explicación! Aceptaré esta respuesta tan pronto como pueda :) –

0

Generalmente no es necesario. Una razón podría ser que la interfaz I es una "interfaz de marcador".

+0

¿Qué es una "interfaz de marcador"? –

+1

Es una interfaz sin ningún método. Sin embargo, no estoy seguro de cómo se relaciona esta respuesta con la pregunta del OP. –

+1

@ NathanSabruka- Una interfaz de marcador es una interfaz como 'Serializable' que no tiene métodos y sirve simplemente como un" marcador "que una clase tiene alguna propiedad. Desde la introducción de las anotaciones, ellos también han caído en desgracia. – templatetypedef

5

Este es un patrón de Java que le permite acceder a las constantes desde la interfaz sin tener que escribir el nombre de esa interfaz una y otra vez. El patrón ha existido desde los primeros días, muchos años antes de que enum s se abrieron paso en el idioma.

Algunos lo consideran cuestionable, porque conduce a la creación de interfaces que no especifican un contrato.

Cuestiones relacionadas