Obtener referencia a objeto

Hola a todos.

Expongo una duda que sospecho debe ser básica pero sucede que no tengo grandes conocimientos de programación.

tengo una clase CSigna la cual tiene otra clase estática anidada CPlan (y otras clases anidadas aparte).

Dentro de mi clase CPlan tengo mis método set y get y un método para crear un archivo XML llamado creaXML.

Aparte hice un formulario que es controlado por la clase NuevoPlanController. En esta clase cree un método crearPlan en el cual pretendo setear los valores de la clase CPlan, para lo cual, cree un objeto de CPlan dentro de mi método guardarPlan y obviamente a través de este objeto setie los atributos.

Hice algunas pruebas y efectivamente los valores pasan de manera natural pero ahora... tengo un menú que controlo con la clase MenuController y en dicho menú tengo la opción de guardar, la cual está ligada al método guardarPlan. En este método creo nuevamente otro objeto de la clase CPlan (subclase anidada de CSigna) y desde allí llamo al método crearXML que está en la clase CPlan.

El XML se genera pero los valores que seteo en la otra clase, llegan nulos. Puse los atributos de CPlan como estáticos porque se supone que todos los objetos comparten una copia de los atributos pero aún así llegan nulos los datos. Estoy seguro que me estoy equivocando en algo básico pero no logro darle ¿Alguna pista? o bien (y por esto el título del tema) puedo hacer algo así como obtener una referencia al objeto creado en el método crearPlan de la clase NuevoPlanController y así, a los valores que setie en ese mismo objeto desde el método guardarPlan de la clase MenuController ?

Como ven estoy bastante revuelto y agradecería cualquier ayuda. Gracias de antemano.

pongo las clases (de manera representativa) a como las tengo

clase CSigna y subclase CPlan

Código:

public class CSigna
{
   public static class CPlan
  {
        private static String nombre;
        private static String Tipo;
        private static String Folio;

        public void setNombre(String nombre)
       {
             this.nombre = nombre
        }
       
        public String getNombre ()
       {
             return nombre;
        }

        public void crearXML(parametros...)
        {
               //Cuerpo del método crearXML
         }

   }
}

Código:
public class NuevoPlanController
{
    //atributos blah blah blah
    TextField campoFolio;
    TextField campoNombrePlan;
    TextField campoTipoPlan;

   public void crearPlan (ActionEvent event)
    {
        //Creo el objeto CSigna.CPlan
        CSigna.CPlan plan = new CSigna.CPlan();
        try
        {
            //Aquí pretendo setear los atributos de la clase CPlan
            plan.setFolio(campoFolio.getText());
            plan.setTipo(tipoPlanChoiceBox.getValue().toString());
            plan.setNombre(campoNombrePlan.getText());
           
        }
        catch(Exception e)
        {
           e.printStackTrace();
        }
      }
}
Esta clase controla el menu

Código:
public class MenuController
{
      //atributos
      public void guardarPlan ()
     {
           CSigna.CPlan plan = new CSigna.CPlan();
           plan.CreaXML(parametros...);
     }
}<blockcode>

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Jose Manuel

Tienes que leer sobre

Tienes que leer sobre creación de objetos y también sobre los campos estáticos. Aquí se puede solucionar de dos formas:
1.- Que asignes un objeto plan a el otro objeto plan. CPlan planQueVoyACrear = planCreado;
2.- Que marques tus atributos estáticos como públicos para que sean vistos por otras clases externas.

El que hayas colocado los atributos de la clase como estáticos esta bien pero, no me parece lo mejor, porque tus valores no son constantes y lo normal es que los campos estáticos se usen para valores constantes. La cosa sale mal cuando quieres obtener los valores de los atributos estáticos ya que son privados y solo lo pueden "ver" sus propios métodos y clases (externa e interna), cuando quieres usarlo desde otra clase ya no tienes acceso a ellos y entonces los valores ya no se asignan al objeto que creas y como los atributos están declarados como null eso es lo que recibes.

Lo que puedes hacer es lo que te mencione en el punto 1. Para eso tienes que crear un método que te devuelva el objeto CPlan o que lo puedas pasar como parámetro al método de guardar para que quede así: guardarPlan(CPlan plan). Entonces ya podrías hacer lo que quieres.

Imagen de neko069

:-(

私は:-(を理解していない
こんにちは私は日本語を話している。