2017-05-03 60 views
1

我有几个类我想作为参数传递给我的一个方法。如何在传递后获取类变量。例如,如果我想通过一个病人班,我想知道病人姓名,电话号码等。如果我想通过医生课,我想知道医生的做法,姓名等。我想要这些信息,以便我可以将它们放入数据库中。我将为每个班级制作几种方法,但是想知道是否有办法制作一种方法并通过一般班级。传递参数中的一般类

下面是一般的方法我的新代码/方法:

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; 

    } 
+2

也许你的类实现了一个getAttributes方法的接口,该方法返回你想要的所有属性的数组?既然你想让一些类具有共享功能,这看起来不是坏习惯,但如果我错了,随时纠正我。 –

+0

您可以通过反射API在运行时访问类的字段名称类型等:https://docs.oracle.com/javase/tutorial/reflect/ – brunesto

+2

接口或基类正是如此。 – chrylis

回答

1

你可以通过“继承”来完成。由于您的数据库表名称为“USERS”并查看您的代码,因此您看起来好像不区分患者用户和医生用户,它们都位于同一个表中,因此您可以创建一个父类,如User,并拥有所有常用属性如id, firstName, lastName等,其中有PatientsDoctor类“扩展”这个父类(每个子类有更多的字段/方法特定于他们)。最后你的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; 
} 

顺便说一句,你还可以创建一个名为接口User,然后让你的PatientsDoctor类实现这个接口,这种方法的优点是你是“接口编程”,但是否应该有父级或接口取决于您的应用程序设计和其他因素,您最好决定它,但有一个接口也是一种选择。你可以通过谷歌代码/程序来了解更多关于它的接口。

+0

“编程接口”只与Java接口有部分关系。编程到抽象基类也是编程到接口。 – chrylis

+0

@chrylis是的,我知道。 – hagrawal

0

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

public interface IUser{ 
    int id(); 
    String firstName(); 
    String lastName(); 
    String email(); 
    String address(); 
    int phoneNumber(); 
    String dob(); 
} 

然后改变addNewUser方法接受IUser类型的参数。

public boolean addNewUser(IUser user){ 
    ... 
    ... 
    ... 
} 

现在,您应该可以通过接口调用user对象的所有方法。