Как получить доступ к методам объекта в пределах foreach l oop? - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующий код:

for(Object o : allObjects) {
    o.Walk();
}

Список allObjects содержит то, что я считаю объектными ссылками при выводе на консоль ("Animal@f769314").

Ошибка Я получаю состояния, что метод Walk() не может быть найден.

Почему это происходит? Обычно я могу просто использовать «.» Для доступа к методам внутри объекта. Эта ошибка возникает из-за того, что я никогда не делал что-то вроде o = new o() внутри l oop? Создание нового объекта не должно быть правильным решением.

Я не знаю, как я мог бы сделать минимальный воспроизводимый пример для этого, но вот немного больше информации.

Внутри API Я использую, есть метод getObjectsInRange ():

protected java .util.List getObjectsInRange (int radius, java .lang.Class cls)

вернуть все объекты в пределах радиуса вокруг этого объекта. Объект находится в пределах досягаемости, если расстояние между его центром и центром этого объекта меньше или равно «радиусу».

Параметры: radius - Радиус круга (в ячейках)

cls - Класс объектов, которые нужно искать (пропустив 'null', вы найдете все объекты).

Возвращает: Список объектов данного типа класса в пределах заданного радиуса.

Все Объекты в радиусе наследуются от класса Moveables, который содержит метод Walk().

Ответы [ 3 ]

0 голосов
/ 15 января 2020

java.lang.Object не имеет Walk метода!

Я полагаю, у вас есть List<MyObject> allObjects, где MyObject имеет метод Walk. Таким образом, ваш код должен выглядеть так:

for(MyObject o : allObjects) {
    o.Walk();
}

Кстати: java Соглашения об именах говорят, что методы должны начинаться с символа нижнего регистра

0 голосов
/ 15 января 2020

Предполагая, что все ваши объекты находятся в списке, ваш код должен понравиться. Вам нужно создавать объекты с 'новым' при добавлении в список. И затем, когда вы предстанете перед l oop, вы сможете получить доступ к другим методам в объектах.

Примечание: - убедитесь, что вы не ошибочно используете класс 'Object' с заглавной буквой 'O' в своем forel oop.

List<object> m = new ArrayList<object>();
m.add(new object());
m.add(new object());
for(object t:m){
   object.walk();
0 голосов
/ 15 января 2020

Чистый Object в Java не имеет метода с именем Walk(). Вы должны привести его к нужному объекту и проверить, является ли он действительным экземпляром, используя ключевое слово instanceof.

...