是否有可能使一个主类实例的作用域存在于整个主类中?我试图从我的对象类运行方法,但方法是在主类。简化后的主类如下所示
public static void main (String[] args)
{
MyMain x = new MyMain ();
}
public void change()
{
System.out.println("whatever");
}
MyMain()
{
System.out.println("--1--");
}
现在,如果我想从对象调用public void change方法,我通常只使用x.change();或MyMain.x.change;在对象中,但是x的作用域显然没有到达对象。是否有一种方法使范围更大的对象,而只说MyMain x = new MyMain();一次?
设置x为静态变量:
private static MyMain x = new MyMain();
或者将更改函数设置为静态,这样就不需要实例来调用它了:
public static void change() { ...
我将main对象作为依赖传递给其他对象。或者更好地隔离一个接口(比如ichangable),并传递它而不是实际的对象。
作为一种变通方法,你可以将main对象设置为Singleton
您必须选择扩大作用域。要么你传递一个对MyMain的引用到每个应该从那里调用方法的对象,要么你添加一个静态变量来保存你的MyMain。
第一种方法很容易实现,因为它可能会创建所有其他对象。所以把new Foo()
写成new Foo(this)
就容易多了。这叫做控制反转。
另一个方法实际上会引入一个全局变量。这种模式称为单例模式。看看这里的实现:(从谷歌的第一个点击)http://radio-weblogs.com/0122027/stories/2003/10/20/implementingTheSingletonPatternInJava.html