【问题标题】:Passing an object array to method将对象数组传递给方法
【发布时间】:2019-03-22 19:43:48
【问题描述】:

所以我想使用一种方法将多个对象写入各自的文件。但是我不知道如何在不定义特定对象的情况下导入对象数组。

人是类纯粹​​用于将创建的对象存储在数组中,因此更容易跨其他类访问。

例如

public class People {

    private Student[10];
    private Teacher[10];

    public void setStudentArray(Student, index) {
        Student[index] = Student;
    }

    public void setTeacherArray(Teacher, index) {
        Teacher[index] = Teacher;
    }
}

public class Student extends People {
    String name;
    int StudentID;
    public String getName() {
        return name;
    }
}

public class Teacher extends People {
    String name ;
    int Teacher ID;
    public String getName() {
        return name;
    }
}
public class Main {
    People p = new People();

    public void main (String[] args) {
        Student s = new Student("default-name" , 1);
        p.setStudentArray(s, 0);

        Teacher t = new Teacher("default-name", 1);
        p.setTeacherArray(t, 0);

        outputName(p.getStudentArray, 0);
        outputName(p.getTeacherArray, 0)
    }

    //THIS IS WHERE I AM STRUGGLING I dont know how to pass teachers or students array to it.
    //I want the Object[] parameter to accept both Student[] and Teacher[]

    public void outputName(Object[], index) {
        System.out.println(Object[index].getName);  
    }   
}

我认为我的方法采用 Object[] 是错误的,但我不知道如何处理它。我认为问题在于 Object[] 与 Teacher[] 和 Student[] 完全不同,这就是我出错的地方。

我想在 Teacher 和 Student 的类中都使用 .getName 方法来打印 Student 的教师的姓名。 (只是让我可以看到传递正在工作。)

如果这是不可能的,我想我不会尝试可以采用不同对象的方法。

我知道我可以只使用两种方法,一种用于学生,一种用于教师,但我希望该方法适用于多个对象,以便可以向其中添加更多对象数组。

【问题讨论】:

  • 它应该是People[]类型以便于多态性,并给它一个标识符
  • 啊,我明白了。抱歉,标识符是什么意思?
  • 在 Java 中,数组是对象,正如您在此答案中看到的那样:stackoverflow.com/questions/8781022/… 您应该在您创建的 People 实例上设置数组:p.setStudentArray(s, 0)。对于教师数组。
  • 哦,对不起,我不是故意离开 setStudentArray(s, 0) 的 p,这是我的一个错误。感谢您指出这一点。我现在已经改变了。但是我仍然不确定如何将该数组传递给 outputName 方法。

标签: java object parameter-passing


【解决方案1】:

所以People 类被StudentTeacher 扩展。

这里有什么共同点?

  1. String name 出现在 StudentTeacher
  2. public String getName() 也出现在 StudentTeacher

您可以将这些共性移至People 类。还要确保从 Student 和 Teacher 类中删除 name 属性和 getName

所以你的People 更新的类可以是:

public class People {
    private String name; //Newly added

    private Student[10];   //This ideally shouldn't be in People class rather a different class
    private Teacher[10];   //This ideally shouldn't be in People class rather a different class

    public void setStudentArray(Student, index) {
      Student[index] = Student;
    }

    public void setTeacherArray(Teacher, index) {
      Teacher[index] = Teacher;
    }

    public String getName() {
      return name;
    }

    public void setName() {
      this.name = name;
    }
}

outputname 方法应该是这样的:

public void outputName(People[] people, index) {
    System.out.println(people[index].getName());  
}

注意:我不是在这里更正语法,只是给出一个想法。

【讨论】:

    【解决方案2】:

    @Li357 说的是对的……你必须稍微改变一下你的造型。即使您设法将 Student[] 作为 Object[] 传递,您也无法调用 getName 方法,因为它不是 Object 方法。

    因此,更好的建模方式是将 getName 方法设为 People 方法,Student 和 Teacher 类都会继承它。

    然后你可以接收 People[] 作为 outputName 方法的参数,并在里面使用 getName 方法。

    【讨论】:

      【解决方案3】:

      首先学习如何声明数组并选择有效的变量。

      在您的 People 类中进行以下修改。

      public class People {
          //Declare arrays like this.
          private Student[] student;
          private Teacher[] teacher;
      
          //Initialize arrays
          public People(){
              student = new Student[10];
              teacher = new Teacher[10];
          }
          public void setStudentArray(Student s,int index) {
              student[index] = s;
          }
      
          public void setTeacherArray(Teacher t, int index) {
              teacher[index] = t;
          }
      
          //Add getter methods
          public Student[] getStudentArray(){
              return student;
          }
      
           public Teacher[] getTeacherArray(){
              return teacher;
          }
      }
      

      在子类 Student 和 Teacher 中添加参数构造函数

      最后在你的 outputName 方法中你可以做这样的事情。

       public static void outputName(Object[] obj, int index) {
      
          if(obj instanceof Student[]){
              Student[] s = (Student[])obj;//parsing to student array
              System.out.println("Student name : "+s[index].getName());
          }
      
          if(obj instanceof Teacher[]){
              Teacher[] teacher = (Teacher[])obj;//parsing to teacher array
              System.out.println("Teacher name : "+teacher[index].getName());
          }
      
      
      }  
      

      输出:

      Student name : default-name
      Teacher name : default-name
      

      【讨论】:

        猜你喜欢
        • 2012-01-20
        • 2016-01-14
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        相关资源
        最近更新 更多