2016-09-23 1 views
0

Ich habe zwei Klassen: WorldOfRobots und Robot (Zusammenfassung). Beide sind öffentlich. Die Welt der Roboter ist im Grunde eine Arraylist des Roboters. Dann habe ich eine Klasse TeleBot, die eine Erweiterung von Robot ist. Ich versuche, eine Methode in der Klasse Telebot zu bauen, die die Liste der Roboter identifizieren und erhalten wird, wo das aktuelle Objekt Telebot ist. Zum Beispiel: Ich erstelle 2 World of Robots (wor1 und wor2) und dann 1 telebot (r1). Ich füge r1 in wor1 hinzu. Ich möchte einen Weg finden, um die Liste der Roboter von wor1 in einer Methode der Klasse TeleBot zu bekommen.Java Holen Sie sich die Liste eines Objekts aus einer anderen Klasse

Hier ist ein bisschen Code.

abstract class Robot { 
// content 
} 

public class Telebot extends Robot 
{ 
    // instance variables - replace the example below with your own 
    private WorldOfRobots wor; 

    public Telebot(String newName, String newDirection) 
    { 
     super(newName, newDirection); 
    } 

    public void something { 

     // here I'm trying to get the list 
     wor = new WorldOfRobots(); 
     ArrayList<Robot> robots = wor.getList(); 
     // Unfortunately this solution doesn't work cause I'm creating a new WOR. What I want is to get the WOR where the Telebot belong. 
    } 

} 

public class WorldOfRobots { 

// List of robots 
private ArrayList<Robot> robots; 

    public WorldOfRobots() { 
    robots = new ArrayList<Robot>(); 
    } 

    public ArrayList<Robot> getList() { 
     return robots; 
    } 

} 

Danke für Ihre Hilfe.

+0

könnten Sie einen zusätzlichen Parameter 'WorldOfRobots wor' an den 'Telebot'-Konstruktor übergeben und dort zuweisen. – SomeJavaGuy

+0

Ich rieche zyklische Abhängigkeit hier, vielleicht könnten Sie auf Ihren Anwendungsfall, was ist der Einsatz von wor in Telebot-Klasse. Was wollen Sie mit der Assoziation von Telebot und Roboterwelt erreichen? – Sikorski

+0

Ich möchte meine Liste von Robotern loopen, um zu überprüfen, ob mein TeleBot einige Attribute mit anderen teilt. Beachten Sie, dass normalerweise nur ein WoR vorhanden ist und mehrere Roboter hinzugefügt werden können. – Cephou

Antwort

0

Sie Ihre Klasse so etwas wie dieses Refactoring kann ...

public class Telebot extends Robot { 

//your code and constructer here 

public void something(WorldofRobots container){ 
    //this is the list containing your instance of telerobot, use it as you like 
} 

} 

nun von außen Klassen können Sie aufrufen robotInstance.something(listOfRobot); Ich bin nicht sicher, wie Sie Ihre Klassen genau interagieren, so kann ich erweitern diese Methode nicht zur Verwendung von Mehr.

0
abstract class Robot { 
private WorldOfRobots world; 

public void setWorld(WorldOfRobots world) 
{ 
    this.world=world; 
} 
// content 
} 

public class Telebot extends Robot 
{ 
    public Telebot(String newName, String newDirection) 
    { 
     super(newName, newDirection); 
    } 
    public void doSomething() 
    { 
     world.doSomethingElse(); 
    } 

} 

public class WorldOfRobots { 

// List of robots 
private ArrayList<Robot> robots; 

    public WorldOfRobots() { 
    robots = new ArrayList<Robot>(); 
    } 
    public void addRobot(Robot robot) 
    { 
     robots.add(robot); 
     robot.setWorld(this); 
    } 

} 

eine Referenz für die WorldOfRobots in der Robot Klasse zu speichern ist in diesem Fall sinnvoll. Wenn ein Roboter zu mehreren WorldOfRobots gehören soll, dann ändere die Weltvariable in Liste.

Verwandte Themen