Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

softklin

[Resolvido] Classe com argumentos de tipo genérico a implementar uma interface

Mensagens Recomendadas

softklin

Boas pessoal. Encontro-me de momento a fazer uma pequena classe que vai ser transmitida pela rede. De forma a que esta seja transmitida, tenho que implementar a interface Serializable.

Surgiu-me a necessidade de passar conteúdos arbitrários nessa mensagem, pelo que considerei fazer a classe com um tipo genérico, algo assim:

public class Email<T> implements Serializable {
  ...
  private T data;
  ...
}

Agora, o que queria garantir era que este T também implementava a interface Serializable, também para poder transmitir este tipo na rede. No entanto, não estou a conseguir.

public class Email<T implements Serializable> implements Serializable

Isto não é válido, e pelo que andei a pesquisar, dizem que não é possível fazer isso. Alguém tem alguma dica sobre como garantir que o tipo genérico implementa aquela interface?

Cumps.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magician

Isso é possivél fazer mas é com subclass no caso de interfaces julgo que não é possivél :S

Uma forma de "contornar" o problema talvez seja forçar a que os objectos a transmitir sejam mesmo Serializable, ou seja onde tens T meter mesmo Serializable.


I haven’t lost my mind; it’s backed up on DVD somewhere!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Nas classes genéricas, as restrições dos tipos parâmetro são feitas através da keyword extends, inclusivé para interfaces, contrariamente ao que seria expectável. Nestas situações, essa keyword pode representar herança (quando o nome que se lhe segue é o de uma classe), implementação (quando o nome que se lhe segue é o de uma interface), subtipo (quando o nome que se lhe segue é o de uma classe que representa um subtipo na hierarquia de tipos parametrizados) ou igualdade (quando o nome que se lhe segue é o de uma classe final que, não podendo ter subclasses, limita o tipo parâmetro ao tipo da classe final).

Portanto, no teu caso, terás:

public class Email<T extends Serializable> implements Serializable

Caso pretendas que T seja subclasse de alguma classe e/ou implemente várias interfaces, tens a seguinte sintaxe:

public class Email<T extends A & B & C> ...

Onde A pode ser uma classe ou interface, e B e C são interfaces.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

É isso mesmo, funcionou bem. Na verdade já tinha visto soluções que utilizavam o extends, mas pensei que era apenas no caso de subclasses, nem cheguei a experimentar.

Muito obrigado a ambos pela ajuda ;)


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.