Foros del Web » Programación para mayores de 30 ;) » Java »

Casting implícito

Estas en el tema de Casting implícito en el foro de Java en Foros del Web. Hola amigos! Una duda me corroe desde hace ya un tiempo. Como narices lo hace la clase Integer (y en general, sus homólogas -Byte, Float, ...
  #1 (permalink)  
Antiguo 05/09/2010, 18:03
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Casting implícito

Hola amigos!

Una duda me corroe desde hace ya un tiempo.
Como narices lo hace la clase Integer (y en general, sus homólogas -Byte, Float, Double, etc-) para poder aceptar cosas como estas:
Código Java:
Ver original
  1. Integer a = 8;
  2. int b = a;

Sin tener que hacer casting?
Y la pregunta del euromillon: Como lo puedo hacer yo para que una clase mia se comporte así? He intentado incluso heredar de Integer pero que casualidad que es una clase Final...

He buscado por Google pero nada. Incluso he logrado obtener el código fuente de la clase pero me da un error al intentar ejecutar Class.getPrimitiveClass() ya que me dice que no es una función visible. Por lo que he visto, eso es lo único que podría hacer lo que yo pido pero no hay caso de hacerlo funcionar ni siquiera con alternativas como int.class o Integer.TYPE... Alguna idea?

Gracias.
Carlos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #2 (permalink)  
Antiguo 06/09/2010, 02:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Casting implícito

Busca por java autoboxing. Lo hace el compilador así que no es algo que puedas hacer tú en tus clases.
Lo más que puedes hacer en tus clases para evitar castings es usar genéricos, pero ese es otro tema.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 06/09/2010, 03:20
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Casting implícito

Mi gozo en un pozo!
Parece ser que tienes razón y el autoboxing no está accesible para los mortales...

Muchas gracias :)

Por si se te ocurre, mi idea era que alguien pudiese introducir un código en Java tal que así:
Código Java:
Ver original
  1. public class Test {
  2.    private int a;
  3.    private byte byteArray[] = new Byte[ 10 ];
  4.    public Test() { this.a = 6; }
  5. }

Entonces el programa le diría cuantos int, byte, short, etc. tiene el código introducido (por supuesto, se debería cambiar todas las referencias 'int' por 'Integer', etc). Por eso, si podía heredar de Byte, por ejemplo, podría añadir un campo static que se actualizase cada vez que se inicializase un byte. Además de este modo, el código aún sería usable (es decir, no tendría que añadir a cada poco cosas tipo setValue o getValue -ya que si el código es extenso, es un engorro-).
Eso si, tampoco quiero programar un Compilador!!

Gracias
Carlos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #4 (permalink)  
Antiguo 06/09/2010, 05:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Casting implícito

No entiendo que es lo que quieres hacer. ¿Saber cuantas variables de un tipo has usado en un trozo de código?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 06/09/2010, 07:40
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Casting implícito

Si, exacto.
Lo cierto es que lo que quiero es saber la cantidad de memoria que usa una instancia de un objeto en todo momento. El problema es que la aplicación no es para un ordenador de escritorio sino para una tarjeta interligente (Smart Card). Estoy desarrollando un pequeño emulador de tarjetas inteligentes donde tu puedes poner el código que le pondrías a una tarjeta inteligente y te lo ejecutaría sin problema emulando ser una tarjeta. El emulador en si ya lo tengo casi desarrolado del todo y la verdad es que funciona muy bien pero me interesaría tener el cómputo de variables que se estan usando en cada momento (incluidos los arrays, es decir, byte a; byte b = new byte[ 6 ], debería decirme que tengo 7 variables de tipo byte).

Gracias
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #6 (permalink)  
Antiguo 06/09/2010, 11:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Casting implícito

Uffs, para lo que propones habría que meter mano, pero bien, a la JVM, usando algun tipo de agente que se instalara en el arranque. Algo parecido a lo que hacen los monitores de rendimiento y consumo de memoria.

Aunque se a que a viene la idea, he programado para SimCards que no son más que SmartCards con un API de telefonía encima, y la parte de memoria es bastante delicada. Es como programar en un lenguaje muy básico, pero usando sintaxis Java .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 06/09/2010, 17:30
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Casting implícito

Buenas,

Se me ocurrió una idea bastante poco elegante pero mal que mal...
Mi idea para este emulador era tocar lo mínimo del código de la tarjeta.
Lo que se me ha ocurrido es que si no quieres el cómputo de variables, no toques nada pero si lo quieres, he añadido algunas funciones a la classe Applet (de donde derivará seguro la clase que introducca el usuario). Las funciones son así:
Código Java:
Ver original
  1. getByte( byte b ) {
  2.    numBytes++;
  3.    return b;
  4. }

Lo mismo para short y para boolean. Además, también funciones similares por si hay que inicializar un array o algo así. De este modo que solo hay que cambiar las lineas de la declaración de esto:
Código Java:
Ver original
  1. static byte Server_CLA = (byte) 0xC0;

A esto:
Código Java:
Ver original
  1. static byte Server_CLA = getByte( (byte) 0xC0 );

De modo que hay que tocar bastante código pero como mínimo no hay que llenar TODO el código con setters y getters.

Se te/os ocurre alguna idea mejor?
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #8 (permalink)  
Antiguo 07/09/2010, 00:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Casting implícito

Teniendo en cuenta que en Java el paso de parametros es por valor y estás pensando en usarlo para primitivas... es bastante ineficiente especialmente como programa para ejecutarse en una tarjeta, donde esas cosas son importantes.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 07/09/2010, 03:32
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Casting implícito

No no no...

La idea es que el código de la tarjeta sea el que es pero tu, quando quieras ejecutar dicho código en el emulador (en el escritorio), deberás realizar algun pequeño cambio (por ejemplo, sustituir el método install por un constructor). Estos cambios se hacen en la aplicación de escritorio que simula ser una Smart Card. Además, sólo se harían en el momento de la instanciación. Después ya podria usar los datos sin problemas.
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #10 (permalink)  
Antiguo 07/09/2010, 03:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Casting implícito

Ah, ya veo. No se, si os sale a cuenta pues adelante. Yo no necesitaba tener tanto control sobre los objetos instanciados, lo minimizaba todo lo posible y antes de cargarlo en la tarjeta la herramienta del fabricante ya te decia el espacio que ibas a ocupar con código y memoria, así que no tuve que usar algo así.

Suerte
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 07/09/2010, 04:34
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Casting implícito

Hace tiempo si que te lo decía el compilador pero en las tarjetas que estoy usando ahora no (uso las JCOP).

En fin, gracias por tu ayuda :)
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:13.