2012-03-03 40 views
1

例如,我該如何檢索java中特定類的實例化對象?

// Object 1 
SensorMeasurement tempSDSMInfo1 = new SensorMeasurement("temperatureMeasurement", tempSDStruct, "SensorDriver", "TemperatureSensor"); 

// Object 2 
SensorMeasurement tempSDSMInfo2 = new SensorMeasurement("temperatureMeasurement", tempSDStruct, "SensorDriver", "TemperatureSensor"); 

//Object 3 
SensorMeasurement tempSDSMInfo3 = new SensorMeasurement("temperatureMeasurement", tempSDStruct, "SensorDriver", "TemperatureSensor"); 

現在在後面的程序,我要檢索特定類的所有實例化對象?

我不想將它們存儲在集合中。還有其他方法嗎?

+3

這聽起來像你想形成一個對象的集合。你爲什麼不想將它們存儲在一個集合中? – 2012-03-03 19:44:52

+0

您是否想找到用於分析或調試的參考? – 2012-03-03 19:48:06

回答

3

沒有其他方法。解決此問題的最佳實踐方法是使用SensorMeasurement的工廠或經理級別。然後,您可以通過工廠或經理稍後參考它們,並在工廠或經理中完成操作,並允許集中式邏輯中心。

+1

實際上有另一種方法,通過儀器,但我懷疑他是在找什麼。 – 2012-03-03 21:03:15

+0

@baba:你能解釋一下儀器的方法嗎,如果可以的話? – Pankesh 2012-03-03 21:21:17

+0

好了,基本上,如果你使用IDE,你已經注意到在調試模式下有可能看到jvm加載了哪些類,有多少個對象等等。當然,這是完成的當前時間的快照。所以,如果你發現一種方法太鉤入了debigging,你就被設置了。看看這個:http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html。正如它所說的,儀器可以爲您提供有關當前jvm統計信息。我個人發現,對於你描述的問題,一個工廠就足夠了(而且不那麼複雜) – 2012-03-03 22:41:51

0

你不能直接用Java語言來做 - 你唯一的選擇是將所需的對象引用存儲在一個集合中。

例如,你可以設計你的類這樣:

public class SensorMeasurement { 
    protected static Set<SensorMeasurement> allMeasurements = new HashSet(); 
    private SensorMeasurement(...) { } 
    public static buildSensorMeasurement(String s, Object x, ...) { 
    SensorMeasurement sm = new SensorMeasurement(s, x, ...); 
    allMeasurements.add(sm); 
    return sm; 
    } 
    public static Set<SensorMeasurement> getAllSensorMeasurements() { 
    return new HashSet<SensorMeasurement>(allMeasurements); 
    } 
} 

這樣你的類的用戶必須使用「buildSensorMeasurement」工廠方法,將每個實例自動添加到您可以爲使用集合期望。