2012-05-13 15 views
5

tengo una clase principal de la siguiente manera:objeto de acceso creado en una clase a otra

public class classB{ 

    public classC getObject(String getstring){ 
    return new classC(getstring); 
    } 
} 

El classC tiene un contructor:

public class classC{ 

String string; 

public classC(String s){ 
    this.string = s; 
} 

public methodC(int i){ 
    <using the `string` variable here> 
} 
} 

Ahora tengo una classA la que van a utilizar el objeto creado en classB (que es, por supuesto, una instancia de classC).

public classA{ 
    int a = 0.5; 

    <Get the object that was created in classB>.methodC(a); 

} 

Esto es necesario ya que se crea una variable en algunas acciones del usuario y se almacena en classB y esto sería usado más en los métodos classC 's. Crear un nuevo objeto hará que mi variable en classB se establezca en nulo, lo cual no es intencionado.

¿Cómo puedo lograrlo?

+0

necesita más información ... de preferencia su código completo .. – WickeD

+2

Pregunta no comprensible ... ¿Cuál es la verdadera pregunta? – aleroot

+2

realmente no comprensible ... –

Respuesta

1

Suponga que el Brand es un objeto liviano y Run es pesado y luego crea un campo con el contenedor para los objetos livianos y esconderlo es una buena idea.

Pero las necesidades de acceso Brand el contenedor al que pertenece que se podía hacer con el mapeo sino que son simplemente inyectar el Run a la Brand así que es mejor poner en práctica el Runable o anotar con JSR330. Y accediendo al contenedor a través del Run de la manera normal.

class MainClass { 
    public static void main(String[] args) { 
    Run r = new Run(); 
    } 
} 

class Run { 
    private Container con1 = new Container(); 

    public Run() { 
    Brand cola = new Brand("Coca Cola"); 
    Brand pepsi = new Brand("Pepsi"); 

    // Creates the container object "con1" and adds brands to container. 
    add(cola); 
    add(pepsi); 
    } 
    public void add(Brand b){ 
    con1.addToList(b); 
    b.setRun(this); 
    } 

    public Container getContainer() { 
    return con1; 
    } 
} 

class Brand { 
    // In this class I have a method which needs to accsess the con1 object 
// containing all the brands and I need to access the method 
    private String name; 
    private Run run; 

    public Brand(String name){ 
    this.name = name; 

    } 
    public void brandMethod() { 
    if(getRun().getContainer().methodExample()) {  // Error here. Can't find "con1".** 
     System.out.println("Method example returned true."); 
    } 
    } 


    public Run getRun() { 
    return run; 
    } 

    public void setRun(Run run) { 
    this.run = run; 
    } 
} 

class Container { 
    // This class is a container-list containing all brands brands 
    private ArrayList<Object> list = new ArrayList<Object>(); 

    public boolean methodExample(){ 
    return false; 
    } 

    public void addToList(Object o) { 
    list.add(o); 
    } 
} 
0

Si desea obtener el objeto creado en ClassB un campo estático debe hacer el trabajo

public class classB { 

    public static objectCReference; 

    public classC getObject(String getstring){ 
    objectCReference = new classC(getstring); 
    return objectCReference; 
    } 
} 

A continuación, puede acceder a la referencia en A

public classA { 
    int a = 0.5; 

    if (classB.objectCReference != null) { // Make sure to null check 
    classB.objectCReference.methodC(a); 
    } 

} 

También por favor, siga el convenciones de idiomas y comenzar sus nombres de clase con letras mayúsculas.

Cuestiones relacionadas