Si tengo un objeto miobjeto de tipo Foo, mientras que en el interior myObject, hay una manera de restablecer a sí mismo y ejecutar el constructor de nuevo?

Sé que el siguiente no funciona, pero puede ayudar a transmitir la idea.

this = new Foo();
No, escribir su propio método de restablecimiento, si es eso lo que usted necesita. De lo contrario, crear un nuevo objeto y asignar a cualquiera necesidades de referencia.
Si usted quiere «reset» del estado de un objeto, entonces usted debe tener un reset método que hace exactamente eso.

OriginalEl autor user2519990 | 2013-12-04

6 Comentarios

  1. 13

    No hay manera de ejecutar un constructor de nuevo en una instancia existente. Sin embargo, usted puede organizar el código en una manera de permitir restablecer con una cantidad mínima de trabajo, como este:

    public class MyClass {
        public MyClass() {
            reset();
        }
        public void reset() {
            //Setup the instance
            this.field1 = ...
            this.field2 = ...
        }
    }

    Nota: el método de restablecimiento de las necesidades de configurar todos los campos, no solo a los que se suele definir en el constructor. Por ejemplo, el constructor puede confiar en la inicialización predeterminada de los campos de referencia para null y campos numéricos de cero; su reset método de necesidades para establecer todos ellos explícitamente.

    Usted debe aclarar esta afirmación: «no Hay manera de ejecutar un constructor de nuevo».
    Editado – gracias!

    OriginalEl autor dasblinkenlight

  2. 6

    Es mejor set null o el uso de new Object()

    obj = null;
       or
    obj = new Object();

    El recolector de basura claro el objeto, finalmente,

    OriginalEl autor Mohamed Abdullah J

  3. 2

    Un enfoque alternativo, que está ganando en popularidad, ya que tiende a hacer que el código sea más fácil a la razón, es para hacer que los objetos inmutable, y en lugar de cambiar su estado (por ejemplo, el restablecimiento de ellos), simplemente cree un nuevo objeto.

    OriginalEl autor Robin Green

  4. 1

    Acaba de escribir un método que se «reset» todas las variables de su objeto (null o 0 o el valor por defecto).

    Estoy usando este método dentro de un juego y un método llamado newGame(). Quiero ser capaz de llamar a newGame() para iniciar un juego nuevo, pero si yo no sobrescribir el último juego, si alguien spams, no sería un error de desbordamiento de pila.
    En teoría, usted necesita un nuevo Objeto de la clase Juego. De esta manera se va a guardar cada estado del Juego en algún lugar si desea o lograr algunos otros requisitos que aparecen. Como puedo ver que estás tratando de resolver un problema de una manera estructurada, con el objeto de herramientas orientadas a la.

    OriginalEl autor talnicolas

  5. 1

    Tiene un conjunto de valores predeterminados o miembros de su clase que almacena en su interior. A continuación, escriba un reset() método que permite restaurar todos estos valores dentro de la clase.

    public void reset(){
        //Reset everything to your default values
    }

    OriginalEl autor Alex Vulaj

  6. 0
    @SuppressWarnings({ "unchecked" })
    static void emptyObject(Object obj) 
    {
         Class c1 = obj.getClass();
         Field[] fields = c1.getDeclaredFields();
    
         for(Field field : fields)
         {
              try
              {
                   if(field.getType().getCanonicalName() == "boolean")
                   {
                        field.set(obj, false);
                   }
                   else if(field.getType().getCanonicalName() == "char")
                   {
                        field.set(obj, '\u0000');
                   }
                   else if((field.getType().isPrimitive()))
                   {
                        field.set(obj, 0);
                   }
                   else
                   {
                        field.set(obj, null);
                   }
              }
              catch(Exception ex)
              {
    
              }
         }}

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here