2009-05-20 6 views
7

Tengo un TreeSet, que estará lleno de números enteros. Para abreviar, estoy intentando iniciar el ciclo después del último (máximo) valor almacenado en la lista. Lo que estoy haciendo ahora para obtener la variable de partida es:objeto de Java a int: ¿una mejor manera?

Object lastObj = primes.last(); 
    Integer last = new Integer(lastObj.toString()); 
    int start = 1 + last.intValue(); // the added 1 is just for program logic 

Estoy seguro de que debe haber una mejor manera de convertir un objeto (que sé que siempre será un int) en el inicio int' '. Alguien sabe de una mejor manera de hacer esto?

Respuesta

8

¿Estás utilizando la versión 1.6 de Java? En ese caso, puede aprovechar el autoboxing y los genéricos para limpiar el código.

primer lugar, el TreeSet se puede declarar como que sólo contiene objetos de enteros

TreeSet<Integer> primes; 

ahora para obtener el objeto del conjunto se puede

Integer last = primes.last(); 

y el uso de la función de autoboxing obtener

int start = 1 + last; 
+6

que simplemente no podía, int start = 1 + primes.last(); –

+1

que sería aún menos código a escribir ... pero para ilustrar la mejora de los genéricos frente a las mejoras autoboxing todo lo posible para dejarlos como estados separados para esta respuesta –

+0

Sí veo donde está viniendo. Acabo de publicar mi comentario como una nota al pie. –

8

En J2SE 5 o posterior sucede automáticamente, con la función "autoboxing".

int start = 1 + last; 

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

Además, si usted sabe que todos van a ser objetos Integer, utilice el tipo parametrizado:

List<Integer> obj = new ArrayList<Integer>()... 

A continuación combinarla con la función autoboxing:

int start = 1 + obj.last(); 
+2

Mi única objeción a autoboxing es una situación en la que "aparecen" de trabajar con enteros, por lo que hacer una comparación == que es una comparación de referencia, en lugar de la comparación del valor esperado. –

+0

Ryan, pensé que si se trató int == entero, entonces el entero sería AUTOBOX en un int y Java compararía las dos primitivas. –

+0

Cuán cierto. Cada vez que confías en que algo sucede automáticamente, añades otra capa de pensamiento que debe pasar en la parte posterior de tu cabeza. ¡Constructores autogenerados de C++! – jbm

4

Si sabes que eran 'int' cuando se pusieron, entonces estaban tr ansformed a Entero mientras está en la Colección (Las colecciones no pueden contener primitivas, solo objetos), como tal, simplemente puede Integer last = (Integer)lastObj;.

Sin embargo, idealmente, usaría un TreeSet<Integer> y luego simplemente alimentaría enteros en primer lugar.

3

Publicar Java 1.4, puede usar autoboxing.

Así se hace,

int start = 1 + (Integer) primes.last(); // the added 1 is just for program logic 

Si ha utilizado los genéricos con su TreeSet (TreeSet<Integer>) usted podría quitar el reparto inicial a entero.

2

¿Por qué no puedes simplemente convertirlo, en lugar de convertirlo en una cadena, luego analizar esa cadena y crear una nueva referencia?

Object lastObj = primes.last(); 
int start = 1 + ((Integer)lastObj).intValue(); 
4

Si sabe primes contiene números enteros, debe hacer primes en un TreeSet<Integer>.

Entonces se convertiría en:

int start = 1 + primes.last().intValue(); 

Si no puede utilizar los genéricos utilizan este:

int start = 1 + ((Integer)prime.last()).intValue(); 

casting en una cadena no sería más que tonta.

Por cierto, yo no sugieren el uso de autoboxing. Hace todo tipo de cosas a tus espaldas. Usar explícitamente Integer me parece más claro. Pero esta es solo mi preferencia personal, puede usar el autoboxing si lo desea.

+0

Autoboxing está integrado en el idioma; no puedes elegir no usarlo. Aconsejo todo lo contrario: nunca declare nada (variable, argumento de método, etc.) como entero si puede usar int en su lugar (y lo mismo ocurre con los otros tipos primitivos). Bloch da el mismo consejo en Effective Java 2ed. –

+0

@Alan M: Obviamente, es posible que desee utilizar int en lugar de Integer siempre que sea posible, pero le sugiero que siempre haga explícita la conversión, para que sepa cuándo lo está haciendo. – Zifre

Cuestiones relacionadas