【问题标题】:Accessing variables from another classes with setter and getter JAVA使用 setter 和 getter JAVA 从另一个类访问变量
【发布时间】:2018-09-21 01:17:42
【问题描述】:

这是我的项目的一个非常简单的例子,它的规模要大得多。

任务:

  • 密码将在setpassword方法中设置。

  • getpassword 方法会返回密码。

  • 密码在 sendmail 类中调用,以便通过电子邮件发送给用户以使用新凭据登录。

但是当我运行整个代码时,除了 sendmail 类不会从 users 类中的 getpassword 方法访问密码之外,一切正常。

我放了一个简单版本的代码:

用户类 >>>>>

public class  users {


private String password;


public users (){}

// GETTING PASSWORD
public String getpassword(){

    return password;
}


// SETTING PASSWORD
 public void setapassword(String password){
     this.password=password;
 }




}

报名班>>>>>>

public class signup {

public void signsup(){

    users  user1 =new users();
    user1.setapassword("player"); 

    sendmail mail1 =new sendmail();
    mail1.Sendsmail();

}
}

发送邮件类>>>>

public class sendmail   {

public void  Sendsmail(){

    users user1 =new users(); // object

    user1.getpassword(); //getting password 

 System.out.println(user1.getpassword()); // If print here I get null
 }
 }

主注册类>>>>

public class SignupMain {

public static void main(String[] args) {

     signup signup1= new signup();
     signup1.signsup();
   }

 }

【问题讨论】:

  • 可以在 sendmail 类的构造函数中传递 user1.getpassword()。
  • 请确保您关注java coding conventions,以便其他人可以更轻松地阅读和理解您的代码。谢谢。
  • 我在哪里可以阅读更多关于我遇到的上述问题的信息?这样我才能更好地理解这个概念。

标签: java methods get set getter-setter


【解决方案1】:

注册类和 sendmail 类中的 user1 对象不同。当然,它们的变量以相同的方式命名,但它们引用不同的对象。要访问用户的密码,您必须将用户传递给 sendmail 类,例如:

Signup.java

public class signup
{

  public void settingPassowrd()
  {
    users user1 = new users();
    user1.setapassword( "player" );

    sendmail mail1 = new sendmail();
    mail1.Sendsmail(user1);

  }
}

与:

public class sendmail
{

  public void Sendsmail(user usr)
  {

    usr.getpassword(); // getting password

    System.out.println( usr.getpassword() ); // will be the proper value from now on.
  }
}

【讨论】:

    【解决方案2】:

    请遵循标准编码约定。我使用标准编码约定更改了您的代码。复制粘贴就行了

    用户类

    public class  Users {
    private String password;
    public users (){}
    // GETTING PASSWORD
    public String getpassword(){
    
        return password;
    }
    // SETTING PASSWORD
     public void setapassword(String password){
         this.password=password;
     }
    }
    

    注册类

    public class Signup {
    
    public void settingPassowrd(){
    
        Users  user1 =new Users();
        user1.setapassword("player"); 
    
        SendMail mail1 =new SendMail(user1);
        mail1.Sendsmail();
    
    }
    }
    

    发送邮件类

    public class SendMail   {
        private Users user1;
        SendMail(Users user1){
            this.user1 = user1
        }
        public void  sendMail(){
        user1.getpassword(); //getting password 
        System.out.println(user1.getpassword()); // If print here I get null
    }
    }
    

    测试代码的主类

     public class SignupMain {
    
    public static void main(String[] args) {
    
     Signup signup1= new Signup();
     signup1.settingPassowrd();
    }
    
    }
    

    【讨论】:

    【解决方案3】:

    问题是在您的 sendmail 类中您创建了一个新用户 users user1 =new users(); --> 因此您无法访问您之前创建的用户,但是您创建了一个显然没有密码的新用户。

    相反,将您的用户传递给注册类中的 sendmail 函数:

    public void settingPassowrd(){
    
        users  user1 =new users();
        user1.setapassword("player"); 
    
        sendmail mail1 =new sendmail();
        mail1.Sendsmail(user1);
    
    }
    

    在课堂上发送邮件:

    public void  Sendsmail(users user) {
        System.out.println(user.getpassword());
    }
    

    顺便说一句,我建议您阅读一些 Java 编码指南。例如:

    • 类名应始终以大写字母开头
    • 类名通常是单数(class users --> class User
    • 方法名称始终以小写字母开头并使用驼峰式 (getpassword() --> getPassword())

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 2020-02-09
      • 2023-03-31
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多