новый Object.getClass () - PullRequest
       12

новый Object.getClass ()

0 голосов
/ 16 февраля 2011

Есть ли способ сделать новый объект типа другого?

Пример:

Soldier extends Person
Accountant extends Person

У каждого подкласса Person есть конструктор, который принимает (BirthDate и DeathDate)

У меня есть метод prepPerson (Person), и он принимаетЧеловек.Я хотел бы, чтобы JComboBox заполнялся объектами Person разных типов (Accountant, Soldier), которые я вызываю .getSelectedItem () и возвращаю объект Person.

Поскольку я использую только эти объекты Person для заполнения меню JComboBox, как определить тип выбранного человека, создать новый объект Soldier или Accountant, чтобы я мог передать его в метод prepPerson?

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Используйте либо instanceof, либо создайте метод getType() для Person, который возвращает enum - тип Person.

Но когда вы начнете использовать instanceof в такой ситуации, вы можете как-то изменить дизайн.

Не могли бы вы описать, почему вам нужно различать их позже?

1 голос
/ 16 февраля 2011

Если у вас будет конечное число выборов, сделайте следующее:

Person thePerson = null; // note, don't call variables theAnything... it's just bad

JComboBox theBox = new JComboBox(new String[]{"Accountant","Soldier","Programmer"});



// later

public void actionPerformed(ActionEvent e) {
        if(e.getSource() == theBox) {
            String who = (String)theBox.getSelectedItem();
            if(who.equals("Accountant") thePerson = new Accountant();
            if(who.equals("Soldier") thePerson = new Soldier();
            if(who.equals("Programmer") thePerson = new Programmer();
        }
}
0 голосов
/ 16 февраля 2011

Зачем вам нужно определять тип? У вас есть Person, и вы должны передать Person новому методу.

Вы, вероятно, найдете полезными разделительные роли / типы от человека. Таким образом, любой человек может иметь одну или несколько ролей, которые могут меняться в любое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...