Уважаемые сэнсэи, гуру и мастера Йоды 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 (что сюда написать?)
}
}
}
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...)
}
}
Нельзя. Придётся привести obj к типу имеющему нужные поля.
for (Object obj: list) {
String month = ((Test) obj).monText;
if ("January".equals(month))
..
}
}
Продвижение своими сайтами как стратегия роста и независимости