2012-03-03 27 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”工厂方法,将每个实例自动添加到您可以为使用集合期望。

相关问题