使用对象值返回对象名称

时间:2014-10-28 15:53:17

标签: java object return-value

我真的不确定如何说出这个问题。但我会在这里尽我所能。如果可以的话,请耐心等待:)。

我有一个包含3个表的数据库(我现在正在处理)。幸运的是,它们都具有相同数量的列。我试图使用“弹出”形式将值输入到它们中。 (不知道怎么做,但我使用this link here作为指导,并希望它有效)

这是我到目前为止为该方法编写的代码..

public form(int option, String val1, String val2, String val3, String val4, String val5)
{
    val1 = null;
    val2 = null;
    val3 = null;
    val4 = null;
    val5 = null;

    JTextField val1Field = new JTextField(20);
    JTextField val2Field = new JTextField(20);
    JTextField val3Field = new JTextField(20);
    JTextField val4Field = new JTextField(20);
    JTextField val5Field = new JTextField(20);

    String name;
    String lbl1 = null;
    String lbl2 = null;
    String lbl3 = null; 
    String lbl4 = null;
    String lbl5 = null;

    switch(option)
    {
    case 1: //if customer
        name = "Customer Information";
        lbl1 = "Customer No:";
        lbl2 = "Customer Name:";
        lbl3 = "Company Name:";
        lbl4 = "Contact Number: ";
        lbl5 = "Discount Rate:";

    case 2: //if item
        name = "Item Information";
        lbl1 = "Item No:";
        lbl2 = "Item Name:";
        lbl3 = "Cost Price:";
        lbl4 = "Selling Price: ";
        lbl5 = "Stock:";

    case 3: //if user
        name = "Staff Information";
        lbl1 = "Staff ID:";
        lbl2 = "Full Name:";
        lbl3 = "Username:";
        lbl4 = "Password: ";
        lbl5 = "adminusercheck:";

    default:
        JOptionPane.showMessageDialog(alphaPOS,
                "Something went wrong! Try again!",
                "ERROR",
                JOptionPane.ERROR_MESSAGE);

    }

    JPanel formPanel = new JPanel();

    formPanel.add(new JLabel(lbl1));
    formPanel.add(val1Field);
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer
    formPanel.add(new JLabel(lbl2));
    formPanel.add(val2Field);
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer
    formPanel.add(new JLabel(lbl3));
    formPanel.add(val3Field);
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer
    formPanel.add(new JLabel(lbl4));
    formPanel.add(val4Field);
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer
    formPanel.add(new JLabel(lbl5));
    formPanel.add(val5Field);
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer

    int result = JOptionPane.showConfirmDialog(null, formPanel, 
            name, JOptionPane.OK_CANCEL_OPTION);

    if (result == JOptionPane.OK_OPTION) 
    {
        val1 = val1Field.getText();
        val2 = val2Field.getText();
        val3 = val3Field.getText();
        val4 = val4Field.getText();
        val5 = val5Field.getText();

    }

    return(option, val1, val2, val3, val4, val5);
}

现在..我花了一段时间意识到我不能返回这样的值,而我可以改为返回对象。我为每个“表”(项目,客户和员工)制作了一个课程。 但..事情是在上面的方法我需要使用一个开关,以便我可以根据表的类型制作标签。

所以我的问题是,有没有办法将对象及其名称传递给方法?或者我错了吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在我看来,你真的不需要返回option,因为你永远不会改变它。此外,看起来您正在尝试让调用者将变量传递给方法,并让方法填充这些变量的值。但是Java没有像C ++和PHP那样的“输出”或“引用”参数,所以这不起作用。 (您可以传入对可变对象的引用,并让方法在该对象中设置一个字段,但是您不能使用String,因为它是不可变的。)

如果是这种情况,那么由于你想要返回的5件事都是同一类型,你可以让你的方法返回String[]

public String[] form(int option)
{
    String[] values = new String[] (5);
    //values[0] = null;  // not necessary since the array elements will already be null
    //values[1] = null;  ...

    ...


    if (result == JOptionPane.OK_OPTION) 
    {
        values[0] = val1Field.getText();
        values[1] = val2Field.getText();
        values[2] = val3Field.getText();
        values[3] = val4Field.getText();
        values[4] = val5Field.getText();

    }

    return values;
}

P.S。我建议使用数组或ArrayList而不是val1Fieldval2Field等单独的变量,这样您就不必像这样重复代码了。

答案 1 :(得分:0)

虽然有办法做到这一点,但我想指出这不是一个好的设计!不要概括方法!我认为您需要尝试重新设计代码。如果你的某个班级发生了变化,你最终还是会分手。为每种表单类型创建一个处理程序。您可以使用Factory模式执行此操作,然后根据该模式获取相应的表单。可能会多一点工作,但你会在以后感谢我:)

如果您需要设计方面的帮助,那么我们肯定可以讨论这个问题。