Я работаю над программой инвентаризации на Java. У меня есть каждый объект в инвентаре, хранящийся как относительный тип класса в DefaultListModel
и JList
для каждого местоположения; например, если у меня есть видео под названием «Мулан» и общая вещь под названием «Мяч» в локации «Общежитие», в JList
под названием «Общежитие», «Мулан» будет экземпляром video
, а «Мяч» будет экземпляр thing
. Все классы наследуются от thing.
Я пытаюсь сделать что-то вроде этого...
Dorm.getSelectedValue().methodInVideoOrThing;
... но когда я пытаюсь это сделать, он говорит:
error: cannot find symbol
Dorm.getSelectedValue().methodInVideoOrThing();
^
symbol: method methodInVideoOrThing()
location: class Object
Поскольку DefaultListModel хранит каждый объект в универсальной переменной object
, я не могу получить доступ к методам любого из созданных мною классов. Я пробовал это...
class c = Dorm.getSelectedValue().getClass();
c A = (c) Dorm.getSelectedValue();
A.methodInC;
... но он вернул следующую ошибку:
error: cannot find symbol
c A = (c) Dorm.getSelectedValue();
^
symbol: class c
error: cannot find symbol
c A = (c) Dorm.getSelectedValue();
^
2 errors
symbol: class c
Я знаю, что мог бы просто перебрать все классы, используя isInstanceOf
, и приводить их к понижению в каждом конкретном случае, но это было бы довольно утомительно. К тому же, когда я...
System.out.println(Dorm.getSelectedValue().getClass());
... он возвращает либо class video
, либо class thing
, в зависимости от того, выбран ли «Мяч» или «Мулан», поэтому я знаю, что java знает, какой это класс.
Итак, есть ли способ получить доступ к методам подкласса, когда этот подкласс хранится как переменная типа объекта без понижения? Или есть способ сделать это с понижением, и я просто делаю это неправильно?