将对象数组传递给方法

时间:2018-10-18 03:24:51

标签: java object parameter-passing

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

People is class纯粹是用于将创建的对象存储在数组中,因此可以更轻松地访问其他类。

例如

extension CVPixelBuffer {
    var size: CGSize {
        get {
            let width = CGFloat(CVPixelBufferGetWidth(self))
            let height = CGFloat(CVPixelBufferGetHeight(self))
            return CGSize(width: width, height: height)
        }
    }
}
extension VNRectangleObservation {    
    func outline(in cvPixelBuffer: CVPixelBuffer, with color: UIColor) -> CALayer {
        let outline = CAShapeLayer()
        outline.path = self.path(in: cvPixelBuffer).cgPath
        outline.fillColor = UIColor.clear.cgColor
        outline.strokeColor =  color.cgColor
        return outline
    }
    
    func path(in cvPixelBuffer: CVPixelBuffer) -> UIBezierPath {
        let size = cvPixelBuffer.size
        let transform = CGAffineTransform.identity
            .scaledBy(x: 1, y: -1)
            .translatedBy(x: 0, y: -size.height)
            .scaledBy(x: size.width, y: size.height)
        
        let convertedTopLeft = self.topLeft.applying(transform)
        let convertedTopRight = self.topRight.applying(transform)
        let convertedBottomLeft = self.bottomLeft.applying(transform)
        let convertedBottomRight = self.bottomRight.applying(transform)
        
        let path = UIBezierPath()
        path.move(to: convertedTopLeft)
        path.addLine(to: convertedTopRight)
        path.addLine(to: convertedBottomRight)
        path.addLine(to: convertedBottomLeft)
        path.close()
        
        path.lineWidth = 2.0
        return path
    }
}

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

我想在Teacher和Student两个类中都使用.getName方法,以便打印Student Teacher的名称。 (仅是这样,我就可以看到通过有效。)

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

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

3 个答案:

答案 0 :(得分:0)

因此PeopleStudent都扩展了Teacher类。

这里有什么共同点?

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

您可以将这些共同点移到People类中。另外,请确保从“学生和教师”类中删除名称属性和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());  
}

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

答案 1 :(得分:0)

@ Li357所说的是正确的...您必须稍作更改。即使您设法将Student []作为Object []传递,您也无法调用getName方法,因为它不是Object方法。

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

然后,您可以将People []作为outputName方法的参数,并在其中使用getName方法。

答案 2 :(得分:0)

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

在您的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;
    }
}

在子类中,学生和教师添加参数构造器

最后,在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