访问私有类变量 Java



我有一个私有的void类,这是我的按钮,该按钮正在从数据库中获取一些资源,我需要将这些变量用于另一个私有类,我该怎么办?对不起,如果我错了,我是新手请帮忙...

private void searchActionPerformed(java.awt.event.ActionEvent evt) {                                       
    String search_updt= search_username_fld.getText();
    try{
        Connection con = DriverManager.getConnection(host,dbname,dbpass);
        Statement log = (Statement) con.createStatement();
        //search for the user in database
        ResultSet rs_log = log.executeQuery("SELECT * FROM Users WHERE Username='"+search_updt+"'");
        while(rs_log.next()){
            String rs_user = rs_log.getString("username");
            String rs_pass = rs_log.getString("password");
            String rs_first = rs_log.getString("first_name");
            String rs_last = rs_log.getString("last_name");
            //if authentication for user successful, go to user panel
            if(rs_user.equals(search_updt)){
                update.setVisible(false);
                updating.setVisible(true);
                this.setSize(430, 391);
             }
            //else show error
            else {
                JOptionPane.showMessageDialog(null, "Username Not Found!");
                break;
            }
        }
    }
    catch(SQLException | HeadlessException e){  
         JOptionPane.showMessageDialog(null, e);
    }
}  

我需要访问rs_user,rs_pass,...来自另一个私有类

我认为您应该考虑使用Observer模式,因为您有其他类需要的局部变量,并且您的ResutSet由 0 或许多记录组成。

public class ResultSetEvent {
    private String rs_user;
    private String rs_pass;
    // ...
    public ResultSetEvent(String user, String pass) {
        this.rs_user = user;
        this.rs_pass = pass;
    }
    // getters / setters
}
public interface SearchActionResultListener {
    void handleResult(ResultSetEvent event);
} 
public class MyClass {
    private List<SearchActionResultListener> listeners = new LinkedList<SearchActionResultListener>();
    public void addSearchActionResultListener(SearchActionResultListener listener) {
        listeners.add(listener);
    }
    public void removeSearchActionResultListener(SearchActionResultListener listener) {
        listeners.remove(listener);
    }
    //...
    private void searchActionPerformed(java.awt.event.ActionEvent evt) {
        //...
        while(rs_log.next()){
            String rs_user = rs_log.getString("username");
            String rs_pass = rs_log.getString("password");
            //...
            ResultSetEvent event = new ResultSetEvent(rs_user, rs_pass)
            for(SearchActionResultListener l : this.listeners) {
                l.handleResult(event);
            }
        }
        //...
    }
}
public class MyOtherClass implements SearchActionResultListener {
    private MyClass reference;
    public MyOtherClass() {
        // reference = ...
        reference.addSearchActionResultListener(this);  
        // ...
    }
    @Override
    public void handleResult(ResultSetEvent event) {
        // handle the event
    }
}

@user3315606:你的类结构不合适,但这是可以接受的,因为你提到你是Java开发人员的新人。我给你这个细节:

如果你想

将一个类的任何变量访问到另一个类中,那么它们应该在类级别使用私有访问说明符,并且它们应该具有关联的公共getter和setter。

以下是根据您的要求进行的虚拟类:

public class Dummy{
  private String rs_user;
  private String rs_pass;
  private String rs_first;
  private String rs_last;
  public void setRs_user(String rs_user){
    this.rs_user = rs_user;
  }
  public void setRs_pass(String rs_pass){
    this.rs_pass = rs_pass;
  }
  public void setRs_first(String rs_first){
    this.rs_first = rs_first;
  }
  public void setRs_last(String rs_last){
    this.rs_last = rs_last;
  }
  public String getRs_user{
    return rs_user;
  }
  public String getRs_pass{
    return rs_pass;
  }
  public String getRs_first{
    return rs_first;
  }
  public String getRs_last{
    return rs_last;
  }
  private void searchActionPerformed(java.awt.event.ActionEvent evt) {  
     ...
     setRs_user(rs_log.getString("username"));
     setRs_pass(rs_log.getString("password"));
     setRs_first(rs_log.getString("first_name"));
     setRs_last(rs_log.getString("last_name"));
     ...
  }
  ...
}
Now if you want to access rs_user, rs_pass ... in other classes then you can use getters method for these properties.
Like fot rs_user you can use getRs_user() method on the object of Dummy class.

最新更新