2012-02-18 11 views
8

Soy un programador principiante y encontré esto en mi libro de texto:¿Paréntesis alrededor del tipo de datos?

public boolean equals(DataElement otherElement) 
{ 
    IntElement temp = (IntElement) otherElement;    
    return (num == temp.num); 
} 

IntElement es una subclase de DataElement. num es un int que almacena un valor para una lista vinculada.

¿Cuál es el propósito de (IntElement) después de temp =? ¿Qué podría pasar con IntElement temp = otherElement? Y, en general, ¿qué significa poner un tipo de datos entre paréntesis como ese?

Respuesta

8

Esto se conoce como la fundición, ver aquí:

Básicamente, al hacer esto:

IntElement temp = (IntElement) otherElement; 

le está diciendo compilador para pasar por alto el hecho de que declaró otherElement como DataElement y confío en que va a ser un IntElement y no DataElement o alguna otra subclase de DataElement.

No se puede hacer simplemente como IntElement temp = otherElement; esta manera que haría otherElement, que se definió como DataElement se convierten en algún otro elemento, en este caso IntElement. Esto será un gran golpe para la seguridad del tipo, que es la razón por la que los tipos se definen en primer lugar.

Esta técnica podría hacerse utilizando la inferencia de tipos:

embargo Java no soporta eso y hay que ser explícita.

Si es posible conseguir otros elementos, es posible que desee utilizar instanceof para comprobar el tipo de ejecución antes de la fundición:

  • Operadores/TheinstanceofKeyword.htm "> http://www.java2s.com/Tutorial/Java/0060_Operators/TheinstanceofKeyword.htm

En algún momento después de pasar por esto, usted puede ser que desee echar un vistazo a los genéricos, también:

2

El propósito de (IntElement) después temp está llevando a cabo una conversión de tipos, más técnicamente, un fundido, en el que está diciendo que otherElement, que es un parámetro de tipo DataElement, debe ser tomado como un objeto de la más concreta tipo IntElement.

1

jmein es correcto, le dice al compilador/intérprete que convierta el tipo de variable en otro. En realidad, solo le dice al procesador que lo trate como de otro tipo. En C esto es una bendición y una maldición, en java, lo que parece que estás escribiendo, DEBES emitir la variable para tratarlo de manera diferente.

Cuestiones relacionadas