Как получить доступ к нестатическому клонированному arrayList для использования в статическом методе в Java - PullRequest
0 голосов
/ 22 сентября 2011

В рамках задания я пытаюсь получить доступ к списку клонированных массивов из другого класса, чтобы я мог его использовать. Но при попытке сделать это я получаю следующую ошибку «Нестатический метод getConnections () не может быть связан со статическим контекстом».

Это код, который я использую для доступа к клонированному массиву. Это в контексте разработки наилучшего способа перелета из одного пункта назначения в другой.

public boolean determineRoute(City from, City to, ArrayList<City> flightRoute)
{
    ArrayList<City> Connections = new ArrayList<City>();
    Connections = City.getConnections(); 
    return true;
}

И так начинается код для этого класса. Он начинается как статический, но, насколько я вижу, он должен влиять только на первый метод. Как я могу сказать java, что этот метод не должен рассматриваться как статический, поэтому я могу получить доступ к клонированному списку из нестатического класса ??

import java.util.*;


public class Lab9_Ex2_Main
{
    //////// START-UP /////////
    public static void main(String[] args)
    {
        new Lab9_Ex2_Main();
    }

Я пропустил много кода, так как думаю, что я не вправе ставить все подряд. Но если вам нужно больше, чтобы получить более четкую картину, я с радостью добавлю больше кода.

Это код из другого класса, который содержит клонированный массив, к которому я пытаюсь получить доступ.

import java.util.*;

// Class:  City
// Purpose: To represent a place in the world that you can fly from/to.    
public class City
{
    private String name;        // The name of the City
    private ArrayList<City> connectsWith;       // Which cities are connected to this one

    public City(String cityName)
    {
        name = cityName;
        connectsWith = new ArrayList<City>();
    }

    // Method: addConnection
    // Purpose: To note that you can catch a flight to the destination, from this city
    // Passed:
    //     destination - The City which you can fly to.
    public  void addConnection(City destination)
    {
        if (destination != null && destination != this)
            connectsWith.add(destination);
    }

    // Method:  getConnections
    // Purpose: To retrieve a list of cities you can reach from this one.
    // Note: You are given a clone, (to avoid a privacy leak), and can manipulate it however 
    //    you like. E.g. you could delete elements.
    public ArrayList<City> getConnections()
    {
        return (ArrayList<City>) connectsWith.clone();
    }

    public String getName()
    {
        return name;
    }

    public String toString()
    {
        return name;
    }
}

1 Ответ

2 голосов
/ 22 сентября 2011

City на самом деле не предоставляет статический метод getConnections(), поскольку это не имеет смысла. Соединения зависят от фактического City экземпляра, и если у вас есть доступ к нему, вы можете вызвать getConnections() для него даже из статического метода.

Это комментарий к списку массивов, который клонирован в getConnections():

// Какие города связаны с этим

Обратите внимание, что это означает, что вы просто не можете получить соединения, не указав этот город (тот, для которого вы получаете соединения), и, следовательно, просто не можете вызвать этот метод только для класса City .

Комментарий к самому методу:

Цель: получить список городов, которые вы можете найти по этому .


Предполагая, что ваш метод determineRoute(...) может быть статическим, он может выглядеть следующим образом:

public static boolean determineRoute(City from, City to, ArrayList<City> flightRoute)
{
   ArrayList<City> connections = new ArrayList<City>();
   connections = to.getConnections(); //or from.getConnections(); what ever makes sense

   //connections is not used, so I assume you want to put them into flightRoute
   flightRoute.addAll(connections);

   return true; 
}

Ваша determineRoute(...) логика кажется довольно странной. Я предполагаю, что вы хотите вычислить маршрут между from и to городом, который вы сейчас не делаете. Однако исправить это - упражнение для вас.

Затем вы можете вызвать этот метод в вашем основном методе (который имеет , чтобы быть статическим), как это:

public static void main(String... args) {
  City berlin = new City("Berlin");
  City beijing = new City("Beijing");

  //fill the connections here

  ArrayList<City> route = new ArrayList<City>();

  boolean success = determineRoute(berlin, beijing, route);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...