Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在参数中传入常规类_Java - Fatal编程技术网

Java 在参数中传入常规类

Java 在参数中传入常规类,java,Java,我有几个类,我想作为我的一个方法的参数传入。传递后如何获取类变量。例如,如果我想通过患者课程,我想知道患者姓名、电话号码等。如果我想通过医生课程,我想知道医生的执业情况、姓名等。我想知道这些信息,以便将它们输入数据库。我打算为每个类创建几个方法,但我想知道是否有一种方法可以创建一个方法并在普通类中传递 以下是我针对通用方法的新代码/方法: public boolean addNewUser(Object obj) { boolean success = false;

我有几个类,我想作为我的一个方法的参数传入。传递后如何获取类变量。例如,如果我想通过患者课程,我想知道患者姓名、电话号码等。如果我想通过医生课程,我想知道医生的执业情况、姓名等。我想知道这些信息,以便将它们输入数据库。我打算为每个类创建几个方法,但我想知道是否有一种方法可以创建一个方法并在普通类中传递

以下是我针对通用方法的新代码/方法:

public boolean addNewUser(Object obj)
    {
        boolean success = false;

        int executedValue = 0; 

        try
        {
            Connection conn = DBConnection.getConnection();

            String query = "INSERT INTO Users (id, firstName, lastName, email, address, phonenumber, dob) VALUES (?,?,?,?,?,?,?)";
            PreparedStatement stmt = conn.prepareStatement(query);
            stmt.setString(1, obj.getId); // not possible
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

        return success;
    }
这是我的老办法

public boolean addNewPatient(Patient patient)
    {
        boolean success = false;

        int executedValue = 0;  

        try
        {
            Connection conn = DBConnection.getConnection();

            String query = "INSERT INTO Users (id, firstName, lastName, email, address, phonenumber, dob) VALUES (?,?,?,?,?,?,?)";
            PreparedStatement stmt = conn.prepareStatement(query);
            stmt.setInt(1,patient.getId());
            stmt.setString(2, patient.getFirstName());
            etc...
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

        return success;

    }

我建议您创建一个接口,然后让
Patient
Doctor
或具有相同属性的任何其他对象实现它

public interface IUser{
    int id();
    String firstName();
    String lastName();
    String email();
    String address();
    int phoneNumber();
    String dob();
}
然后更改
addNewUser
方法以接受类型为
IUser
的参数

public boolean addNewUser(IUser user){
    ...
    ...
    ...
}
现在,您应该能够通过界面从
用户
对象调用所有方法。

您可以通过“继承”来完成。由于您的数据库表名为“USERS”,并且查看您的代码时,您似乎没有区分患者用户和医生用户,所有这些都在同一个表中,因此您可以创建一个父类作为
user
,并具有所有公共属性,如
id
firstName
lastName
等,然后让
Patients
Doctor
类“扩展”这个父类(每个子类都有更多特定于它们的字段/方法)。最后,DAO方法将是
addUser(User-User)
。例如,下面的示例类接受
User
对象

public boolean addNewUser(User user) {
    boolean success = false;

    int executedValue = 0;

    try {
        Connection conn = DBConnection.getConnection();

        String query = "INSERT INTO Users (id, firstName, lastName, email, address, phonenumber, dob) VALUES (?,?,?,?,?,?,?)";
        PreparedStatement stmt = conn.prepareStatement(query);
        stmt.setInt(1, user.getId());
        stmt.setString(2, user.getFirstName());
    } catch (Exception e) {
        System.out.println(e);
    }

    return success;
}


另外,您还可以创建一个名为
用户
的界面,然后让您的
患者
医生
类实现此界面,这种方法的优点是您可以“编程到界面”,但您应该拥有父类还是接口取决于您的应用程序设计和其他因素,您最好自行决定,但拥有接口也是一种选择。您可以通过谷歌代码/程序来访问接口,以了解更多信息。

也许可以让您的类实现一个带有getAttributes方法的接口,该方法返回您想要的所有属性的数组?由于您希望某些类具有共享功能,这似乎不是一个糟糕的做法,但如果我错了,请随时纠正我。您可以在运行时通过反射API访问类的字段名称类型等:接口或基类正是如此。谢谢@patrick hainge,我将尝试实现这个接口,看看它是如何实现的“编程到一个接口”只是部分地与Java
接口相关。对抽象基类的编程也是对接口的编程。