1 votes

Comment les classes Java obtiennent-elles des informations de la classe Entry ?

Disons que dans ma classe de point d'entrée (c'est-à-dire la classe qui s'exécute lorsque le programme démarre (qui a l'attribut public static void main(String args[]) ). Dans cette classe, j'ai cette variable :

private ArrayList<String> myData=new ArrayList<String>();

Cette classe instancie une autre classe, qui a besoin d'avoir accès à la classe myData de la classe du point d'entrée. Comment peut-il récupérer cette liste de tableaux ?

Edit : Pour clarifier, dans le main() méthode que je pourrais faire :

SomeOtherClass myClass=new SomeOtherClass();

et ensuite je pourrais le faire :

myClass.someMethod();

cependant, dans le myClass comment pourrais-je exécuter une méthode/récupérer quelque chose de la classe d'entrée, qui a instancié l'objet myClass objet ?

2voto

jjnguy Points 62123

La meilleure façon de donner à la classe que vous instanciez l'accès à myData serait de le passer dans le constructeur lors de la création.

Ensuite, dans votre constructeur, vous pouvez sauvegarder le fichier ArrayList dans une variable membre de la classe.

Par exemple, le constructeur de votre objet ressemblera à ceci :

private ArrayList<String> myData;

public YourObjConstructor(ArrayList<String> data){
    myData = data;
}

2voto

banjollity Points 2980

Il semble que votre point d'entrée soit toujours statique lorsqu'il appelle une autre classe, mais que votre ArrayList soit membre d'une classe de type instance de celui-ci. Vous devez sortir du monde statique et entrer dans les instances.

Je refactoriserais votre méthode main en un construtor privé, et je mettrais un nouveau main() qui le lance comme une nouvelle instance.

Notez que ce code est très grossier, mais il devrait servir à illustrer ce que vous devez faire.

public class EntryPoint {
    private ArrayList<String> myData=new ArrayList<String>();

    public static void main( String[] args ) {
        EntryPoint ep = new EntryPoint();
        ep.init();
    }

    private void init() {
        // Populate myData perhaps?

        SomeOtherClass myClass=new SomeOtherClass();
        myClass.someMethod( this );
    }

    public List<String> getMyData() {
        return myData;
    }
}   

public class SomeOtherClass {
    public void someMethod( EntryPoint entry ) {
        List<String> data = entry.getMyData();
        // do stuff with data..!
    }
}

1voto

Michael Myers Points 82361

La classe contenant main() est juste une classe ordinaire. Dans votre cas, il faudrait faire myData public et éventuellement static (ou, bien sûr, ajouter un accesseur). Tout comme vous le feriez avec n'importe quelle autre classe.

Vous pouvez également passer un Entry à l'autre classe, comme ceci :

public static void main(String[] args) {
    Entry entry = new Entry();
    SomeOtherClass myClass=new SomeOtherClass(entry);
    // continue as before
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X