如何访问学生类中的方法。当我打印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/

10-09 03:13