Вызов метода извне класса в Java - PullRequest
0 голосов
/ 15 августа 2011

Здесь, кажется, это общий вопрос, но для всех тех, кого я читаю, они, похоже, имеют дело с разными вещами.

Я пишу программу с основным классом, которая управляет массивом объектов другого класса, и мне трудно вызывать метод print () из этого второго класса из основного класса.

Класс Main пытается вызвать print (), которая находится в классе Unit. Класс Unit выглядит примерно так:

public class Unit{

    static int numOfUnits = 0;
    public Unit[] units = new Unit[8];

    private int unitID;

//constructors are here

    public void print(){
    for (int i = 0; i < units.length; i++)
    System.out.print(units[i].unitID);
    }

    public void add(Unit unit){
    mobs[numbofUnits] = unit;
    numOfUnits++;
    }
}

Итак, я хотел бы, чтобы через класс Main я добавил новые объекты Unit в массив unit. Когда я закончу добавлять их (используя вызов unitToAdd.add (unitToAdd) в классе Main), я бы хотел вызвать метод print () модуля из Main.

Чего я не знаю, так это того, использовать ли модификатор static, или нет, как ссылаться на переменные в самом методе print () (т. Е. Использовать ли this.unitID, unit [ я] .unitID и т. д.) и т. д.

Что меня смущает, так это просто природа метода print (). У меня есть сеттеры и геттеры, которые работают очень хорошо, так как я полностью понимаю, что вызову specificUnit.setID () изменяется конкретная переменная для этого конкретного объекта, но я не знаю, как заставить работать методы наподобие print ().

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Простой ответ - вам нужен Unit экземпляр для вызова print(). Я настоятельно рекомендую вернуться к основам - Изучение языка Java .

0 голосов
/ 15 августа 2011

Вам, вероятно, следует избегать реализации списка Unit s в Unit. Вы можете полностью избежать статического состояния, создав класс UnitList для хранения списка единиц, возможно, в ArrayList, а затем создав экземпляр UnitList, который является локальным для вашего main метода.

public static void main(String[] argv) {
  UnitList myUnitList = new UnitList();
  myUnitList.add(new Unit(...));
  myUnitList.print();
}

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

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

public class Unit{

  // static here since every unit does not need to have a number of units.
  static int numOfUnits = 0;
  // static here since every unit does not need to contain other units.
  static Unit[] units = new Unit[8];

  // no static here since every unit does need its own ID.
  private int unitID;

  //constructors are here

  // static here since every unit does not need to know how 
  // to print a particular 8 units.
  public static void print(){
    for (int i = 0; i < numOfUnits; i++)
      System.out.print(units[i].unitID);
  }

  // static here since every unit does not need to know how
  // to add to a global list.
  public static void add(Unit unit){
    mobs[numbofUnits] = unit;
    numOfUnits++;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...