Definição e Propósito
Interface Marcadora:
- Não contém declarações de métodos.
- Marca uma classe como tendo uma propriedade específica.
- Exemplo: Serializable indica que uma classe pode ser serializada.
- Vantagens das Interfaces Marcadoras
Definição de Tipo:
- Interfaces marcadoras definem um tipo que as instâncias de uma classe implementam.
- Permite detecção de erros em tempo de compilação.
Exemplo:
public class MyClass implements Serializable {
// Implementação
}
Verificação em Tempo de Compilação:
- O uso de interfaces marcadoras permite que erros sejam detectados durante a compilação.
Exemplo com Serializable:
ObjectOutputStream.writeObject(myObject); // Garante que myObject seja Serializable
Precisão na Marcação:
- Interfaces marcadoras podem ser aplicadas com precisão a subtipos específicos.
Exemplo:
public interface MyMarkerInterface extends MySpecificInterface {
// Sem métodos adicionais
}
Exemplos de Uso
Serializable:
- Indica que uma classe pode ser serializada.
Exemplo:
public class Person implements Serializable {
private String name;
private int age;
// Getters, setters, etc.
}
Interface Set como Marcadora Restrita:
- Aplica-se apenas a subtipos de Collection, mas não adiciona métodos além dos definidos por Collection.
- Refina contratos de métodos como add, equals e hashCode.
- Comparação com Anotações Marcadoras
Anotações Marcadoras:
- Podem ser aplicadas a mais elementos do programa (classes, interfaces, métodos, etc.).
Exemplo:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyMarkerAnnotation {
}
@MyMarkerAnnotation
public class MyClass {
// Implementação
}
Quando usar Interface Marcadora vs. Anotação Marcadora:
- Use interface marcadora se:
- A marcação deve definir um tipo.
- Pode querer escrever métodos que aceitem apenas objetos com essa marcação.
Use anotação marcadora se:
- A marca se aplica a elementos que não sejam classes ou interfaces.
- Faz parte de um framework que usa intensamente anotações.
Vantagens das Anotações Marcadoras
- Consistência em Frameworks:
- Facilita a consistência em frameworks baseados em anotações.
Exemplo:
@MyFrameworkAnnotation
public class MyClass {
// Implementação
}
Decisão de Uso
Para definir um tipo:
- Use uma interface marcadora.
- Para marcar elementos que não sejam classes ou interfaces:
- Use uma anotação marcadora.
Parte de um framework baseado em anotações:
Use uma anotação marcadora.
Exemplo Final
- Interface Marcadora:
public interface MyTypeMarker {
}
public class MyClass implements MyTypeMarker {
// Implementação
}
public void process(MyTypeMarker obj) {
// Processa apenas objetos marcados com MyTypeMarker
}
Anotação Marcadora:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotationMarker {
}
@MyAnnotationMarker
public class MyClass {
// Implementação
}
Resumo
- Interfaces marcadoras são usadas para definir tipos sem métodos adicionais.
- Anotações marcadoras são usadas para marcar elementos de programa de forma ampla.
- A escolha depende do contexto e do objetivo da marcação.
Top comments (0)