gpt4 book ai didi

java - 如何迭代并获取动态传递的类的值

转载 作者:行者123 更新时间:2023-12-02 01:05:52 26 4
gpt4 key购买 nike

我有一个接受任何类类型对象的方法,我想迭代该对象并打印详细信息。

void showDetails(List<?> obj) {
System.out.println(obj);
for(Object ob : obj) {
//how to print the course and student details
}
}

我如何迭代并打印传递的 obj 值的详细信息。下面是完整的示例代码。

import java.util.ArrayList;
import java.util.List;

class Student{
private int stid;
public int getStid() {
return stid;
}

public void setStid(int stid) {
this.stid = stid;
}

}
class Details extends Student{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}


}

class Course extends Student{
private String shortTerm;
private String fullTerm;
public String getShortTerm() {
return shortTerm;
}
public void setShortTerm(String shortTerm) {
this.shortTerm = shortTerm;
}
public String getFullTerm() {
return fullTerm;
}
public void setFullTerm(String fullTerm) {
this.fullTerm = fullTerm;
}

}
public class Test {

void showDetails(List<?> obj) {
System.out.println(obj);
for(Object ob : obj) {
//how to print the course and student details
}
}
public static void main(String[] args) {

Details d1 = new Details();
d1.setName("John");
d1.setAddress("Street 21");
d1.setStid(10);
Details d2 = new Details();
d2.setName("Sam");
d2.setAddress("Street 151");
d2.setStid(11);
List<Details> listObj = new ArrayList<>();
listObj.add(d1);
listObj.add(d2);

new Test().showDetails(listObj);

//course
Course c1 = new Course();
c1.setShortTerm("6months");
c1.setFullTerm("12 months");
c1.setStid(111);
List<Course> courseList = new ArrayList<>();
courseList.add(c1);
new Test().showDetails(courseList);
}
}

我想做showDetails(List<?> obj)作为通用方法,以便可以传递作为 Student 类的子类的任何类对象。 List<?> ,其中?表示作为 Student 类的子类的任何类对象。

最佳答案

执行此操作的标准多态方法是让 Student(及其子类)知道如何将其自己的详细信息转换为 String。例如,你可以有这样的东西:

class Student{
private int stid;

public int getStid() {
return stid;
}

public void setStid(int stid) {
this.stid = stid;
}

public String getDetails() {
return "ID: " + getStid();
}

}

class Details extends Student {

/*
... other fields etc...
*/

@Override
public String getDetails() {
StringBuilder sb = new StringBuilder();
sb.append(super.getDetails()).append('\n');
sb.append("Name: ").append(getName()).append('\n');
// TODO: append other fields
return sb.toString();
}

}

class Course extends Student {

/*
... other fields etc...
*/

@Override
public String getDetails() {
StringBuilder sb = new StringBuilder();
// TODO: similar to Details class
return sb.toString();
}
}

然后您的显示详细信息函数可以使用 getDetails() 方法:

void showDetails(List<? extends Student> obj) {
System.out.println(obj);
for(Student s : obj) {
System.out.println(s.getDetails());
}
}

关于java - 如何迭代并获取动态传递的类的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57729334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com