新的Object.getClass()

时间:2011-02-16 17:09:46

标签: java oop reflection dynamic jcombobox

有没有办法制作另一种类型的新对象?

示例:

Soldier extends Person
Accountant extends Person

Person的每个子类都有一个接受(BirthDate和DeathDate)

的构造函数

我有一个名为prepPerson(Person)的方法,它接受一个Person。我想要一个JComboBox填充不同类型的Person对象(Accountant,Soldier),我调用.getSelectedItem()并返回一个Person对象。

由于我只使用那些Person对象来填充JComboBox菜单,如何检测所选人员的类型,创建一个新的Soldier或Accountant对象,以便我可以将它传递给prepPerson方法?

3 个答案:

答案 0 :(得分:1)

instanceof上使用getType()或创建方法Person,返回枚举 - Person的类型。

但是当你在这种情况下开始使用instanceof时,你可能会考虑以某种方式改变设计。

你能描述一下为什么以后需要区分它们吗?

答案 1 :(得分:1)

如果您要进行有限数量的选择,请执行以下操作:

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();
        }
}

答案 2 :(得分:0)

为什么需要检测类型?您有一个Person,您必须将Person传递给新方法。

您可能会从有用的人身上找到分离的角色/类型。这样任何人都可以拥有一个或多个可以随时改变的角色。