Ferramentas de Site


dev_geral:java:tutorial:0504_especialcast

Conversões (Cast)

A conversão de tipos de dados permite que o conteúdo de uma variável possa ser transformado noutro tipo de forma legal. Esta conversão, quando explicita, é feita colocando o tipo de dados para o qual queremos converter entre parêntesis antes do valor a converter:

double valorAConverter = 3455.22;
int valorConvertido = (int) valorAConverter;

Para os tipos primitivos as conversões não oferecem problemas de maior, a única situação anómala que resulta de uma conversão entre tipos primitivos é a possivel perda de precisão. Por exemplo, se convertermos o float 3.14 para inteiro, acabamos com o valor 3 já que os tipos inteiros não possuem casas decimais e estas são simplesmente descartadas.

Quando falamos de objectos, outros problemas podem surgir. Em conversões entre tipos de objectos existem duas situações possíveis:

  • Upcast
  • Downcast

O upcast acontece sempre que um objecto é convertido para um dos seus supertipos, por exemplo, podemos converter qualquer objecto para a classe Object já que esta está no topo da hierarquia. Do mesmo modo, se possuirmos a hieraquia SerVivo > Mamifero > Humano, podemos converter uma variável do tipo Humano para Mamifero ou para SerVivo sem quaisquer problemas.

Este tipo de conversão é automático (não precisamos de dizer explicitamente que queremos uma conversão), é sempre seguro e deriva da aplicação directa do conceito de polimorfismo.

O downcast é uma conversão que acontece quando convertemos um tipo de dados num subtipo, por exemplo, continuando com a hierarquia apresentada anteriormente, se quisermos converter um Mamifero para Humano estamos perante um downcast.

Esta operação tem de ser feita explicitamente pelo programador, através da utilização dos parêntesis, e tem de ser o programador a garantir que a operação é válida. Se a conversão não for possível o interpretador irá lançar uma excepção. Sempre que é feito um downcast o interpretador executa um conjunto de operações para garantir que a conversão é possível.

Navegação

dev_geral/java/tutorial/0504_especialcast.txt · Última modificação em: 2018/05/14 21:37 (edição externa)