2017-05-03 50 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對象的所有方法。