![](/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.