![](/img/trans.png)
[英]How to get the specific instance of a class from one of the instance variables that belong to it
[英]How to get specific instance of class from another class in Java?
我使用main
方法创建了以下类,该方法为此特定Application
创建Application
新实例以及ApplicationModel
, ApplicationView
和ApplicationController
实例。
public class Application
{
// Variables
private ApplicationSettings settings;
private ApplicationModel model;
private ApplicationView view;
private ApplicationController controller;
// Constructor
public Application()
{
settings = new ApplicationSettings();
model = new ApplicationModel();
view = new ApplicationView(model);
controller = new ApplicationController();
}
// Main method
public static void main(String[] args)
{
Application application = new Application();
}
// Getters for settings, model, view, controller for instance of Application
}
我知道,总会有一个唯一的Application
实例。
我想在ApplicationModel
, ApplicationView
和ApplicationController
类中获取此特定实例。
这怎么可能?
我会在Application类上使用单例。
使用public static
方法返回唯一的应用程序实例。
public class Application
{
private Application() { } // make your constructor private, so the only war
// to access "application" is through singleton pattern
private static Application _app;
public static Application getSharedApplication()
{
if (_app == null)
_app = new Application();
return _app;
}
}
您可以在此处阅读有关单件设计模式的更多信息。
每次需要唯一的Application
实例时,您都会:
Application app = Application.getSharedApplication();
如果您需要保证只有一个Application实例并且您需要这些类可以访问它,那么您希望使用Singleton设计模式。 我不打算评论它是否是构建应用程序的最佳方式,但它将满足您的问题中的要求。
将Application
类的构造函数更改为private
,并将this
对象发送到ApplicationXxx
类。
private Application()
{
settings = new ApplicationSettings(this);
model = new ApplicationModel(this);
view = new ApplicationView(this, model);
controller = new ApplicationController(this);
}
您可以在main
方法中调用Application
类的new
。
必须更新ApplicationSettings
, ApplicationModel
, ApplicationView
和ApplicationController
以在其构造函数中获取Application
对象。
将Application
类型的参数添加到组合的构造函数中。 当你创建他们的实例时,只需传递this
。 例如
public class Application {
String s = "Setting";
class ApplicationSettings {
Application sc;
ApplicationSettings(Application sc){
this.sc = sc;
System.out.println(sc.s);
}
}
// Variables
private ApplicationSettings settings;
// Constructor
public Application()
{
settings = new ApplicationSettings(this);
}
// Main method
public static void main(String[] args)
{
Application application = new Application();
}
// Getters for settings, model, view, controller for instance of Application
}
我现在尝试了这个,你可以将this
作为构造函数arg在Application
的构造函数中传递给其他类(假设有一个为主类声明的引用)。 这样,您显然可以创建Application
类的多个实例。 如果那就是你想要的......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.