2012-05-13 9 views
5

Ho una classe primaria, come di seguito:accesso creata in una classe in un altro

public class classB{ 

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

Il classC ha un contructor:

public class classC{ 

String string; 

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

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

Ora ho un classA che sarà utilizzando il oggetto creato in classB (che è ovviamente un'istanza di classC).

public classA{ 
    int a = 0.5; 

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

} 

Questo è necessario come variabile viene creata su alcune azioni dall'utente e memorizzato in classB e questo sarebbe ulteriormente utilizzato nei metodi classC s'. La creazione di un nuovo oggetto renderà la mia variabile in classB impostata su null che non è intesa.

Come posso ottenere questo risultato?

+0

bisogno di maggiori informazioni ... preferibilmente il vostro codice completo .. – WickeD

+2

Domanda non comprensibile ... Qual è la vera domanda? – aleroot

+2

davvero incomprensibile ... –

risposta

1

Si supponga che lo Brand sia un oggetto leggero e Run è pesante, quindi creare un campo con il contenitore per gli oggetti leggeri e nasconderlo è una buona idea.

Ma i Brand esigenze di accesso al contenitore che appartiene ad esso potrebbe essere fatto con la mappatura, ma stiamo semplicemente iniettare il Run al Brand quindi è meglio implementare la Runable o annotare con JSR330. E accedere al contenitore attraverso il Run nel modo normale.

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

Se si desidera ottenere l'oggetto creato in ClassB un campo statico dovrebbe fare il lavoro

public class classB { 

    public static objectCReference; 

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

Poi si può accedere al riferimento in un

public classA { 
    int a = 0.5; 

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

} 

Inoltre si prega di seguire la convenzioni linguistiche e inizia i nomi delle tue classi con lettere maiuscole.

Problemi correlati