2016-04-30 3 views
-1

Ich habe ein Problem mit der Übergabe von Variablen zwischen Klassen.Warum kann die zweite Klasse keine variablen Daten von der dritten Klasse bekommen?

Das Problem, das ich habe, ist, dass die zweite Klasse die variablen Daten aus der dritten Klasse nicht erhält, nachdem die erste Klasse den Wert auf die Variablen der dritten Klasse setzt.

Die Art, wie ich es gerne arbeiten würde, ist, dass ich eine Klasse (KlasseA) habe, wo es den Wert vom Benutzer erhält und die set-Methode die dritte Klasse aufruft, um den Wert auf die zweite Klasse zu setzen (classB) wird verwendet, um den Wert mit der get-Methode in der dritten Klasse abzurufen, und die dritte Klasse (ClassC) befindet sich dort, wo get- und set-Methoden gespeichert sind.

KlasseA Codierungsverfahren:

//method for 'add' button functionality 
    public void btnAddActionPerformed(java.awt.event.ActionEvent evt) 
    { 
     ArrayList<UserInfo> userobjList = new ArrayList<>(); 
     //calling data field revelant text fields 
     int EmpNumber = Integer.parseInt(txtEmpNum.getText()); 
     String EmpAccessType = txtAccessType.getText(); 
     //creating the object to parse data to userinfo class 
     UserInfo user = new UserInfo(EmpNumber, EmpAccessType); 
     //setting the data to varibales in userinfo class 
     user.setEmpNumber(EmpNumber); 
     user.setEmpAccessType(EmpAccessType); 
     //adds the object to the arraylist 
     userobjList.add(user); 
     //creates the object to use the method for adding employee to system 
     AddEmpFunction addUser = new AddEmpFunction();   
     addUser.test(); 
    } 

Diese Klasse Benutzerinformationen erhält und setzt die Daten in der dritten Klasse

ClassB Verfahren zum Benutzer zu Codiersystem Zugabe:

//variables 
    int EmpNumber; 
    String AccessTypes; 
    //creation of object to be used throughout 
    UserInfo user = new UserInfo(EmpNumber, AccessTypes);  
public void AddNewEmpLogin() 
     { 
      try 
      { 
       //SQL string command to be executed to add user login details 
       String addNewUserLogin = "insert into userLoginData(Username, accessType) values (" 
         + user.getEmpNum() + "," 
         + quotate(user.getEmpAccessType()) + ")"; 
       //create the statement that will be used 
       Statement stmt=conn.createStatement(); 
       //executes the addNewUser statement 
       stmt.executeUpdate(addNewUserLogin); 
      } 
      catch (Exception e) 
      { 
       //exception error message is shown 
       JOptionPane.showMessageDialog(null, "Error adding new User's details \n " + e, "Database Error", JOptionPane.ERROR_MESSAGE); 
      } 
     } 

Diese Klasse Dort werden die Daten von der dritten Klasse erhalten und dann in MySQL gespeichert.

ClassC ist, wo die Get- und Set-Methoden sind:

private int EmpNumber; 
private String EmpAccessType; 
//constructor 
    public UserInfo(int EmpNumber, String EmpAccessType) 
    { 
     this.EmpNumber = EmpNumber; 
     this.EmpAccessType = EmpAccessType; 
    } 
public int getEmpNum() 
    { 
     return EmpNumber; 
    } 
    public void setEmpNum(int EmpNum) 
    { 
     this.EmpNumber = EmpNum; 
    } 
public String getEmpAccessType() 
    { 
     return EmpAccessType; 
    } 
    public void setEmpAccessType(String EmpAccessType) 
    { 
     this.EmpAccessType = EmpAccessType; 
    } 

Die Daten sind vorbei sehr gut von classA zu Klasse C, aber die in classB zurückgegebenen Daten Whcih es zeigt Form Klasse C-null für die Zeichenfolge aufruft und 0 für die ganze Zahl.

Bitte könnte jemand bitte erklären wo mein Problem ist und wie ich das beheben kann. Ich habe viel über Methoden gelesen und gelernt und es gibt kein aktuelles Beispiel für das, was ich erreichen möchte.

Jede Hilfe wird sehr geschätzt. :)

Antwort

1

Weil Sie zwei verschiedene Instanzen der dritten Klasse haben. Sie tun dies in einem Ort (Variablennamen zu illustrieren geändert):

UserInfo userA = new UserInfo(); 
userA.setEmpNumber(EmpNumber); 
userA.setEmpAccessType(EmpAccessType); 

Und dann diese in einer anderen:

UserInfo userB = new UserInfo(); 
userB.getEmpNumber(); 
userB.getEmpAccessType(); 

So stellen Sie Daten auf einem Objekt, und versuchen dann zu bekommen, dass Daten von einem anderen Objekt. Aber Sie können nicht, weil für dieses Objekt nie Daten festgelegt wurden.

Betrachten Sie als Analogie zwei identische Autos. Die gleiche Marke, das gleiche Modell, kam von der gleichen Produktionslinie. Sie setzen Gas in ein Auto und versuchen dann, das andere Auto zu fahren. Aber du kannst nicht. Weil es kein Gas darin hat.

Sie müssen die gleiche Instanz des Objekts verwenden:

UserInfo user = new UserInfo(); 
user.setEmpNumber(EmpNumber); 
user.setEmpAccessType(EmpAccessType); 
// ... 
user.getEmpNumber(); 
user.getEmpAccessType(); 

Wenn Ihre zweite Klasse eine gültige Instanz der dritten Klasse, um seine Aufgabe erfüllen muss, dann sollte es, dass als erforderlich Konstruktorparameter Wenn also die erste Klasse die Variable user enthält und dann eine Instanz der zweiten Klasse erstellt, übergibt sie die Variable user an diese Instanz. Also gibt es nur einenuser.

(zusätzlich als eine Randnotiz, brauchen Sie nicht die Werte an den Konstruktor übergeben und die Setter verwenden. Der eine oder andere ist in Ordnung. Ein Wert muss nur einmal eingestellt werden.)

+0

danke für Ihre Hilfe. Ich sehe, wo mein Problem ist. Ich werde es Aussortieren. Danke, dass du mir das Problem aufgezeigt hast. Sehr geschätzt :) – John

0

int EmpNumber; String AccessTypes; //creation of object to be used throughout UserInfo user = new UserInfo(EmpNumber, AccessTypes);

setzen Sie neue Benutzer nach oben ohne gefüllt Feld.

Und dann Sie

+ user.getEmpNum() + "," + quotate(user.getEmpAccessType()) + ")"; von Ihrem leeren user so gibt es 0 und null sind. Übergeben Sie Ihre user zuerst von Klasse A nach Klasse B?

0

Ihre Klasse B, Daten zu empfangen nicht von der Klasse A. Klasse C, UserInfo scheint ist ein Datenspeicherobjekt (POJO), aber die Instanz user, die in der Klasse A erstellt wird, wird nie in Ihrem Beispielcode Klasse B bestanden .

Tatsächlich scheint Klasse B eine eigene Instanz von UserInfo mit leeren Werten zu erstellen.

Um dies kurz zu halten: Übergeben Sie das Objekt user von Klasse A nach B, zum Beispiel mit AddEmpLogin(UserInfo user).

Als nächstes lesen Sie eine solide Einführung in die objektorientierte Programmierung.

Verwandte Themen