【问题标题】:Why can't my class members access my getter methods?为什么我的班级成员不能访问我的 getter 方法?
【发布时间】:2016-04-18 07:36:40
【问题描述】:

我有这两个文件,personalinfo.java 定义personalInfo 类,testpersonalinfo.java 测试类。当我尝试从 testpersonalinfo.java 访问我的 getter 方法时,我收到一个错误,指出这些方法未定义。谁能告诉我为什么?

个人信息.java:

public class personalInfo {

    private String name;
    private String address;
    private int age;
    private long phoneNumber;

    personalInfo(){
        name = "Default Name";
        address = "Default Address";
        age = 100;
        phoneNumber = 0000000000;
    }

    personalInfo(String nam, String add, int ag, int phone){
        name = nam;
        address = add;
        age = ag;
        phoneNumber = phone;
    }

    public String getName(){
        return name;
    }
    public String getAddress(){
        return address;
    }
    public int getAge(){
        return age;
    }
    public long getPhoneNumber(){
        return phoneNumber;
    }

    public void setName(String nam){
        this.name = nam;
    }
    public void setAddress(String add){
        this.address = add;
    }
    public void setAge(int ag){
        this.age = ag;
    }
    public void setPhoneNumber(long phone){
        this.phoneNumber = phone;
    }
}

testpersonalinfo.java:

import java.util.Scanner;

public class personalInfoExample {

    public static void main(String[] args){

        personalInfo[] pers = new personalInfo[3];
        Scanner input = new Scanner(System.in);

        String inName;
        String inAddress;
        int inAge;
        long inPhoneNumber;

        for(int i=0; i<3; i++){
            pers[i] = new personalInfo();
            System.out.printf("Please input the name for person %s: ", i );
            inName = input.nextLine();
            pers[i].setName(inName);
            System.out.println(pers[i].getName);
            System.out.printf("Please input the address for person %s: ", i );
            inAddress = input.nextLine();
            pers[i].setAddress(inAddress);
            System.out.println(pers[i].getAddress);
            System.out.printf("Please input the age for person %d: ", i );
            inAge = input.nextInt();
            pers[i].setAge(inAge);
            input.nextLine();
            System.out.println(pers[i].getAge);
            System.out.printf("Please input the phone number for person %d, without dashes included (ex. 1112223333): ", i );
            inPhoneNumber = input.nextLong();
            pers[i].setPhoneNumber(inPhoneNumber);
            System.out.println(pers[i].getPhoneNumber);
            input.nextLine();
        }

    input.close();

    }
}

【问题讨论】:

  • 你是如何构建这些类的?在您熟悉 Java 之前,我建议您使用 IDE,因为从长远来看,它会为您节省大量时间。
  • pers[i].getPhoneNumber -> pers[i].getPhoneNumber() ...
  • @Eran - 这是一个答案,我希望能够支持它。
  • 啊,是括号。我正在使用 Eclipse IDE,它没有给我足够的信息来回答这个问题。我该如何关闭它?
  • @DavidWallace 有时我更喜欢写评论。

标签: java function class


【解决方案1】:

getter 是函数,而不是字段;所以要给他们打电话,你需要使用()(比如:pers[i].getAdress()

另外,类名应该大写,但这并不是很重要(只是为了更容易阅读。

正如有人在评论中建议的那样,您应该使用 IDE,以防您不这样做。 IDE 会为您指出与上述类似的明显小错误(错误和约定错误),并为您节省大量时间。如果您不知道从哪里开始,请搜索 EclipseNetbeans。 (Eclipse 是我个人的最爱)。

编辑:我刚刚看到 Eran 评论了您的错误的答案,所以如果他将其作为答案发布,请先接受他的答案。

【讨论】:

    【解决方案2】:

    在所有 sysout 语句中,您尝试访问 getter 而不使用 () 这个。

    请试试这个

     System.out.println(pers[i].getName()); //change all your getters
    

    而不是

     System.out.println(pers[i].getName);
    

    因为getName() 是一个方法而不是一个变量,所以总是需要在方法名称之后使用开闭大括号()您定义或调用)

    请更改所有这些方法(引发编译时错误的方法)。

    System.out.println(pers[i].getName);
    System.out.println(pers[i].getAddress); //all these lines are causing of Compile time error.
    System.out.println(pers[i].getAge);
    System.out.println(pers[i].getPhoneNumber);
    

    【讨论】:

      【解决方案3】:

      如果您不想使用 getter 方法访问 class 定义之外的实例变量(私有变量以外),您可以调用 instance variable-直接在实例对象上命名,例如

      pers[i].name 
      

      有关变量访问控制的更多信息,请参阅java-doc

      【讨论】:

        猜你喜欢
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多