【问题标题】:Java - objects in an object?Java - 对象中的对象?
【发布时间】:2016-05-30 23:28:28
【问题描述】:

早上好/下午/晚上,

我是一名 Java 初学者,但我的任务是制作一个数据库应用程序。 在该应用程序中,我想创建一个在创建该类的实例时返回其他对象的类:

    public LoadStudents(String query){

    File studentsFolder = new File("Data/Students/");
    try{
    switch (query){

    case "all": // additional cases might be added in the future
      //- that's why I am using the class in the first place

        for (final File entry : studentsFolder.listFiles()){
            if(!entry.isDirectory()){
                FileInputStream in = new FileInputStream(entry);
                ObjectInputStream object = new ObjectInputStream(in);
                Student[] student = (Student[]) object.readObject();
                object.close();
            }

        }
        break;
    default: 
        final File entry = new File("Data/Students/"+query+".stud");
        FileInputStream in = new FileInputStream(entry);
        ObjectInputStream object = new ObjectInputStream(in);
        Student searched = (Student) object.readObject(); 

    }
    }

    catch(Exception load){
        load.printStackTrace();
    }

} 

我的问题是:创建 LoadStudents 对象时可以访问学生对象吗?如果有,怎么做?

LoadStudents load = new LoadStudents("something");
load.searched.doSomething();

也许?

附:很抱歉,如果这是一个无聊的问题,但我还是想知道答案。

【问题讨论】:

  • 尝试一下,看看它是否有效。你的想法似乎不错。另外,也许不要在构造函数中进行加载。这样你就可以有一个返回值。

标签: java object scope


【解决方案1】:

如果一个类的公共方法返回对象(任何类型的对象),那么其他类可以不受限制地使用它。还有其他规则,但这是开始 Java 编程时要考虑的主要规则。

另外,我建议您(至少在开始时)采用不同的方式来组织您的解决方案。

  1. 让你的类名反映事物。
  2. 让您在类中的方法名称反映您可以使用该东西做什么。

所以

public class Database {
  .....

  public Student getStudentById(String id) {
    ....
  }

  ....
}

然后像这样被使用

Database database = ....

Student bob = database.getStudentById("2323");

或类似的东西。

通过这种方法,你可以添加一个“StudentListener”接口,像这样

public interface StudentListener {
   ....
   public void studentAdded(Details ...);

}

并使数据库接受学生听众。

(in Database)
public void addListener(StudentListener listener) {
   ...
}

然后当学生添加完成时调用附加行

for (StudentListener listener : listeners) {
   listener.studentAdded(details);
}

数据库会通知听众添加了一个学生。

上面的模式被称为监听器模式,你应该学习它。它在很多情况下都非常有用,您会再次看到它。

【讨论】:

    【解决方案2】:

    将学生搜索的对象添加到班级。

    例如。

    公开的学生搜索;

    在构造函数中将对象设置为搜索字段。您不需要创建新对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-13
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多