2010-08-26 14 views
39

Sé lo que es una clase contenedora, envuelven tipos primitivos (por ejemplo, int, double, etc.) a objetos de su clase respectiva.¿Por qué hay clases de contenedor en Java?

Pero, ¿por qué necesitamos las clases de Wrapper en primer lugar? ¿Por qué no simplemente ir con tipos primitivos donde los tenemos?

+1

ver también: http://stackoverflow.com/questions/2134798/java-why-are-wrapper-classes-needed – AHungerArtist

Respuesta

57

varias razones posibles:

  • Para que un valor nulo es posible
  • Incluir en una colección
  • Para tratar genéricamente/polimórfica como un objeto, junto con otros objetos
+1

Sin embargo, conserva la sintaxis fácil en el código y permite poner métodos de ayuda estáticos útiles en una ubicación intuitiva. – ellimilial

+0

Double.compare es un gran ejemplo –

18

ejemplo Am cuando se utilizan envolturas sería en las colecciones, que puede tener un ArrayList<Integer>, pero no un ArrayList<int> misma con HashMap s etc. Para conseguir la seguridad de tipos utilizamos los genéricos y genéricos necesitan objetos no primitivos.

+2

genéricos se introdujeron mucho después de envolver clases (JDK1.1). – user2418306

0

Una razón pragmática de la parte superior de mi cabeza es que los objetos pueden ser nulos, los primitivos no pueden *. Si no puedo asegurarme de que una función puede devolver un int, usar el wrapper es la única manera de lidiar con obtener el int que espero. Autoboxing se ocupa del resto.

7

Las clases de contenedor se utilizan en lugar de tipos primitivos cuando se espera un objeto.

En las Colecciones, por ejemplo, una ArrayList puede contener instancias de cualquier subclase de Objeto, pero como los tipos primitivos no son Objetos, no podrían estar contenidos en ArrayList.

11

Java es un lenguaje de programación orientado a objetos. Creo que también podría preguntar: ¿por qué tenemos primitivos y por qué todo no es solo un objeto?

Los diseñadores de Java mantienen los dos separados para mantener las cosas simples. Usas las envolturas cuando necesitas tipos que encajen en el mundo orientado a objetos, como polimorfismo, colecciones, etc. Usas las primitivas cuando necesitas eficiencia.

+0

más 1 por> Creo que también podría preguntar: ¿por qué tenemos primitivos y por qué todo no es solo un objeto? – Kaunteya

1

Java es un lenguaje orientado a objetos y como se dijo todo en java es un objeto. Pero, ¿y los primitivos? Se quedan fuera en el mundo de los objetos, es decir, no pueden participar en las actividades del objeto , como ser devuelto por un método como un objeto, y agregándose a una Colección de objetos, etc. Como solución a este problema , Java le permite incluir las primitivas en la familia de objetos utilizando lo que se denomina clases contenedoras.

+1

¿Citas tú mismo? – user2418306

2

clase contenedora:

  1. Java utiliza tipos primitivos, como int, char, dobles para mantener las tipos de datos básicos soportados por el lenguaje.

  2. A veces es necesario crear una representación de objeto de estos tipos primitivos .

  3. Estas son clases de colección que se ocupan solo de dichos objetos.Uno necesita envolver el tipo primitivo en una clase.

  4. Para satisfacer esta necesidad, java proporciona clases que corresponden a cada uno de los tipos primitivos. Básicamente, estas clases encapsulan o envuelven los tipos primitivos dentro de una clase.

  5. Por lo tanto, se les conoce comúnmente como tipo envoltorio. Tipo envoltorio son clases que encapsulan un tipo primitivo dentro de un objeto.

  6. Los tipos de envoltura son Byte, Corto, Entero, Largo, Carácter, Booleano, Doble, Flotador.

4

clases Wrapper se utilizan para convertir cualquier tipo primitivo en un tipo de datos primitivo object.The no son objetos, que no pertenecen a ninguna clase, que se definen en la propia lengua. Al almacenar en estructuras de datos que solo admiten objetos, es necesario convertir primero el tipo primitivo en objeto, por lo que optamos por la clase contenedora.

1

Hay tres razones por las que se puede utilizar un objeto Number en lugar de una primitiva:

  1. Como argumento de un método que espera un objeto (se utiliza a menudo cuando manipulación de colecciones de números).
  2. Para usar las constantes definidas por la clase, como MIN_VALUE y MAX_VALUE, que proporcionan los límites superior e inferior del tipo de datos.
  3. Para utilizar métodos de clase para convertir valores a y desde otros tipos primitivos, para la conversión hacia y desde las cuerdas, y por la conversión entre sistemas de numeración (decimal, octal, hexadecimal, binarios).

Fuente de:

The Numbers Classes

+0

No obtengo el ítem 2. No deberías estar usando algo como 'i.MAX_VALUE' de todos modos. Además, las constantes 'MIN_VALUE' /' MAX_VALUE' son de * tipo primitivo *. – aioobe

Cuestiones relacionadas