Обращение к объекту из ArrayList по его полям

151
08 декабря 2019, 16:50

Уважаемые сэнсэи, гуру и мастера Йоды Java, нужна подмога. Ситуация тривиальная, но тревожащая мой покой. Возможно ли в Java обратиться к элементу ArrayList типа Object по какому-то из его полей? В идеале мы вводим с клавиатуры строку "January" сравниваем её с полем объекта jan через foreach (я полагаю) и что-то тогда уже выводим. А в идеале было бы чудно, если бы можно было проверить есть ли поле January хоть у какого-то объекта в ArrayList :)

public class Test{
String monText;
int monChislo;
public Test(String monText, int monChislo){
   this.monText = monText;
   this.monChislo = monChislo;
}
public static void main(String[] args) throws IOException {
   Test jan = new Test("January", 1);
   Test feb = new Test ("February", 2);
   Test mar = new Test ("March", 3);
ArrayList<Object> list = new ArrayList<>();
   list.add(jan);
   list.add(feb );
   list.add(mar );
String month = reader.readLine();
   for (Object obj: list) {
      if (что сюда написать?)
      }
   }
}
Answer 1

Object - это суперкласс для всех классов, поэтому он может содержать любой тип. Если тип объектов известен, то можно кастить в рантайме к нужному типу, и тогда уже использовать его поля. Просто надо различать тип объекта при компиляции может отличаться от типа в рантайме.

Поскольку все объекты имеют известный тип, то нет необходимости кастить к нужному типу, вместо этого нужно использовать тип параметра объекта ArrayList.

   Test jan = new Test("January", 1);
   Test feb = new Test ("February", 2);
   Test mar = new Test ("March", 3);
   ArrayList<Test> list = new ArrayList<>();
   list.add(jan);
   list.add(feb );
   list.add(mar );
   String month = reader.readLine();
   for (Test obj: list) {
      if (obj.monText...)
      }
   }
Answer 2

Нельзя. Придётся привести obj к типу имеющему нужные поля.

for (Object obj: list) {
  String month = ((Test) obj).monText;
  if ("January".equals(month))
    ..
  }
}
READ ALSO
Работа с элементом ComboBox JavaFX

Работа с элементом ComboBox JavaFX

У меня есть небольшая программа, в которой есть ComboBox элементДанный элемент принимет 5 значений для примера

146
Класс File и каталоги

Класс File и каталоги

Сейчас изучаю ввод-вывод, столкнулся с таким понятие как каталог, не очень понимаю что это, можете объяснить?

104
Как из timestamp извлечь временной сдвиг?

Как из timestamp извлечь временной сдвиг?

У меня есть объект Timestamp в который записано значение

140
Абсолютный путь и обычный

Абсолютный путь и обычный

Прочитал вот это: Полный или абсолютный путь — это путь, который указывает на одно и то же место в файловой системе, вне зависимости от текущего...

149