如何访问学生类中的方法。当我打印myList时,它在学生类中使用toString,我不确定如何访问其他方法。那有可能吗?
PS:我已经在程序中试过了,只是没有在此处发布内容以使代码更短。
public class DatabaseAccess <T> {
public T[] database;
public ArrayList<T>myList = new ArrayList<T>();
public ArrayList<T> testlist = new ArrayList<T>();
public void userInterface(){
int count = 1;
for (T i : myList){
System.out.println(count++ + ": " + i);
}
}
public void readDatabase(){
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("grocery.bin"));
database = (T[]) in.readObject();
for (int i = 0; i < database.length; i++){
myList.add(database[i]);
}
myList.add((T) "\n");
myList.add((T) "\tStudents:");
ObjectInputStream in1 = new ObjectInputStream(new FileInputStream("students.bin"));
database = (T[]) in1.readObject();
for (int i = 0; i < database.length; i++){
myList.add(database[i]);
}
}
}
public class Student implements Serializable, Comparable{
private String name, id, address;
private double gpa;
public Student(String name, String id, double gpa){
this.name = name;
this.id = id;
this.gpa = gpa;
}
public int compareTo(Object object){
Student student = (Student ) object;
if(this.gpa < student.getGpa())
return -1;
else
if(this.gpa > student.getGpa())
return 1;
else
return 0;
}
public String getName(){ return name;}
public String getId(){ return id;}
public double getGpa(){ return gpa;}
public String toString(){ return (String.format("%16s%10.4s%8s", name, id, gpa));}
}
最佳答案
假设您在数据库访问中的意思是,理论上您不是。
现在,您可以使用类似以下的内容,但这是一个可怕的想法,并且绝对有糟糕的设计余地(没有冒犯的意思-我只是不想给人以为这段代码是完全可以的,或者您应该使用它-仅在技术上可行):
for (T t : myList) {
if (t instanceof Student) {
Student student = (Student) t;
student.getGpa();
} else if (t instanceof Food) {
...
}
}
就DatabaseAccess而言,它不是学生。这是类型T的随机对象,我们基本上一无所知。如果您无法在Student和Food之间创建通用接口来执行所需的操作,则必须问自己为什么该DatabaseAccess需要了解类的具体信息,并弄清楚设计应该真正看起来像是将更多内容分开的样子理智地。
您要进行自定义打印吗?也许应该在学生/食品课上进行格式化。
你是吗处理用户输入并处理数据库中对象的数据?将数据库访问和数据操作的关注点分开。更改GPA并不一定需要您知道数据是存储在ObjectOutputStream还是Oracle数据库中。因此,让DatabaseAccess处理数据库,并通过某些定义的接口定义与
DatabaseAccess<Student>
一起使用的其他一些类,并处理特定于Student的操作。在不确切知道您要做什么的情况下,很难提供可靠的建议:如果您认为自己需要做自己想做的事情,则可能要退后一步,想一想是否有更好的方法来解决问题。问题,使您不会。
关于java - 泛型和ArrayList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18306337/