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

usa o no cloneable ?? lo implementa?

Estas en el tema de usa o no cloneable ?? lo implementa? en el foro de Java en Foros del Web. hola , bueno miren este codigo, que no se para que implementa la interfaz clonable, ya que no la usa... osea no entiendo... aca crea ...
  #1 (permalink)  
Antiguo 13/11/2013, 09:46
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
usa o no cloneable ?? lo implementa?

hola , bueno miren este codigo, que no se para que implementa la interfaz clonable, ya que no la usa... osea no entiendo...

aca crea una clase "implementando la interfaz cloneable"
Código Java:
Ver original
  1. public class Persona implements Cloneable{
  2.  
  3.    public int dni, edad;
  4.  
  5.       public Persona( int d, int e) {     this.dni = d;       this.edad = e;
  6.  
  7.     }
  8.  
  9.  
  10.  
  11.       public Persona clone()   {
  12.  
  13.       Persona clon = new Persona(this.dni,this.edad);
  14.  
  15.       return clon;
  16.  
  17.    }
  18.  
  19.  }


aca se llama al metodo...

Código Java:
Ver original
  1. public class Programa {
  2.  
  3.    
  4.  
  5.      public static void main(String arg[]) {
  6.  
  7.        
  8.  
  9.         Persona p = new Persona(74999999,35);
  10.  
  11.         Persona p2 = p.clone();
  12.  
  13.          // hemos clonado en el objeto p2 los datos de la Persona p , por tanto p2
  14.  
  15.         // tiene como dni 74999999 y una edad de 35
  16.  
  17.         // a continuación vamos a cambiar el dni de p
  18.  
  19.        
  20.  
  21.         p.dni=25454345;
  22.  
  23.        
  24.  
  25.         System.out.println("Datos Persona p: DNI:"+p.dni+" Edad:"+p.edad);
  26.  
  27.         System.out.println("Datos Persona p2 clon: DNI:"+p2.dni+" Edad:"+p2.edad);
  28.  
  29.      
  30.  
  31.        }
  32.  
  33.  }

osea, todo es, metodo propios creados, esa clonacion del objeto.
no es tomada de un metodo de la interfaz, implementada..

o digo cualquier cosa....
  #2 (permalink)  
Antiguo 13/11/2013, 11:23
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: usa o no cloneable ?? lo implementa?

Para que realmente clone, usa esto en la clase Persona

public Object clone() {
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
System.out.println("Clone not supported");
}
return obj;
}

Y luego tendrás que hacer un cast

Persona p2 = (Persona) p.clone();
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 13/11/2013, 12:26
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: usa o no cloneable ?? lo implementa?

Hola:

La clase Object tiene un método clone() que si lo llamas salta una excpeción de no soportado. Como todas las clases java heredan de Object por defecto, todas tienen este método clone() y da excepción si lo llamas.

La forma de indicar que una clase tiene un método clone válido, es hacer que implemente Cloneable. Esta interfaz no tiene métodos, pero el acuerdo es que si se hace el método clone(), se herede de esta interfaz. De esta forma, el código antes de clonar algo puede hacer algo como

Código Java:
Ver original
  1. if (a instanceof Cloneable) {
  2.     b = a.clone();
  3. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 13/11/2013, 14:10
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: usa o no cloneable ?? lo implementa?

una pregunta, que sentido tiene implementar la interface. Cloneable
que es lo que cambiar, por que yo no veo nada...

--------

una interface. yo lo veo como un paquete de metodos, funciones..
y si lo implemento...

en la propia clase, llamo a ese metodo.. y listo...como si fuera una funcion de php...

lo que digo es que en el codigo, declaro metodos, que son propios de la clase...
a lo sumo, lo estoy sobreescribiendo del propio java...

pero ustedes. que pueden decir....?
  #5 (permalink)  
Antiguo 13/11/2013, 15:48
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: usa o no cloneable ?? lo implementa?

En este caso concreto no cambia nada. Sólo es como una "marca" para indicar que esa clase tiene un método clone que funciona, a diferencia del clone que hereda de Object que da una excepción.

En cualquier caso, tienes razón con las interfaces. Este Cloneable no deja de ser una interface "extraña".

Es como Serializable, tampoco tiene métodos, y por el mero hecho de implementar Serializable, las clases se pueden Serializar.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 14/11/2013, 07:35
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: usa o no cloneable ?? lo implementa?

1) existe una interface cloneable? que tiene un metodo clone?
2) en el ejemplo, se sobreescribio, el metodo...no? , por que si dicen que existe... por algo implemento la interfaz...
  #7 (permalink)  
Antiguo 14/11/2013, 07:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: usa o no cloneable ?? lo implementa?

1) No, no existe una interface Cloneable con método clone(), echa un ojo a la API http://docs.oracle.com/javase/7/docs...Cloneable.html
2) Si, sobreescribes el método, pero no porque esté en la interfaz, sino porque está en la clase Object, de las cual todas las clases java heredan por defecto. Nuevamente, mira la API http://docs.oracle.com/javase/7/docs...ng/Object.html

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: clase, metodo, programa
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 07:16.