【发布时间】:2015-01-29 23:13:45
【问题描述】:
我有一个控制器类,它同时具有静态和非静态变量和方法。
public class Controller
{
// Model that will be used throughout the program
private static Model model;
private static ArrayList<Model> modelList = new ArrayList<Model>();
// User Views
private static OpenProgramView initialView = new OpenProgramView();
private DriverProfileView driverProfileView;
}
我还需要一个静态方法,以便其他类可以在没有控制器实例的情况下访问它。以下是对该方法的调用:
int askYear = Controller.getModel().getYear();
我遇到的问题是,当我使用前一行代码时,它似乎调用了私有静态对象的新实例 - OpenProgramView。我知道这一点,因为它在测试期间不应该弹出。我还将其他视图从非静态更改为静态,看看会发生什么,当我使用静态方法时它们也会弹出,但非静态视图没有弹出。
我的问题 - 为什么会这样?似乎当我调用静态方法时,它正在为控制器中的所有静态类变量创建一个新实例,并且正在创建一个问题。
编辑:
我没有说明这只发生在我测试这个特定的 sn-p 代码时。当这个问题发生时我还没有创建一个Controller对象,因此我第一次接触Controller类是调用静态方法。
当我在测试模式下运行程序并实际将其用于功能目的时 - 在创建程序时已经创建了一个 Controller 对象,因此,一旦我调用静态方法,这个问题就不会发生,因为这不是我第一次“接触”课堂。感谢您的帮助。
【问题讨论】:
-
了解 Java 类中的静态初始化
-
这个问题应该不会出现可能你在
getModel静态方法中做了其他你没有显示的事情,从而产生了问题。 -
请添加更多描述。
标签: java model-view-controller static controller