情况:主窗体调用带有文本框的模态jDialog,其中用户填写参数以创建或修改某个类的实例,称为ClassA。
当对话框需要修改现有实例时,它作为参数传入构造函数。否则 jDialog 将创建一个新的 ClassA 实例。
问题:主窗体需要访问那个新实例,我认为将整个主窗体作为参数传递,并让对话框通过方法调用将新实例推入其中是不干净的代码,因为这样可以完美地重新可用的独立对话框仅可用于需要特定类名和方法来接收新实例的单个主窗体。
在单击 OK 按钮后,通过调用 getClassAInstance() 方法(在修改现有实例时也可以调用该方法),使主窗体从 jdialog 获取新实例更为合乎逻辑。该方法在相关 jdialog 的新实例上的“setVisible(true)”方法之后调用。对话框出现,主窗体的线程会一直休眠,直到对话框关闭(因为它是模态的)。OK 按钮调用 jDialog 的 dispose() 方法,然后下一条语句是主窗体对 jDialog 的 getClassAInstance() 调用。
这是代码中的相同内容..
ClassAInstanceMakerDialog imd = new ClassAInstanceMakerDialog(this, true);
imd.setVisible(true);
//imd.dispose(); after OK button click
System.out.println(imd.getClassAInstance()); //return a new ClassA instance
//output: whatever ClassA.toString() should return, works fine
问题:我试过了,它似乎工作得很好。但是,这是一个好的代码吗?getClassAInstance() 方法返回“null”是否有任何危险,因为垃圾收集器在处理 jDialog 之后并且在主窗体完成调用之前收集了 ClassA 实例?
如果我没有说清楚,请原谅我,我不是以英语为母语的人。如果您想看一些代码,请告诉我...