因此,我想使用一种方法将多个对象写入各自的文件。但是,我不知道如何在不定义特定对象的情况下导入对象数组。
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的名称。 (仅是这样,我就可以看到通过有效。)
如果这不可能,我想我不会尝试一种可以采用不同对象的方法。
我知道我只能使用两种方法,一种用于学生,一种用于教师,但是我希望该方法可用于多个对象,以便可以向其中添加更多对象数组。
答案 0 :(得分:0)
因此People
和Student
都扩展了Teacher
类。
这里有什么共同点?
String name
同时出现在Student
和Teacher
public String getName()
也出现在Student
和Teacher
您可以将这些共同点移到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