0

假设我有 10 个对象。现在,我创建它们,存储它们的唯一方法是在该对象中创建一个包含某个值的字符串数组。我不会将实际对象本身存储在任何地方。有什么方法可以访问基于该字符串数组的对象吗?

String[] someArray = new String[10];


 some loop (i = 1 to 10)

       Object newObject = new Object("hello" + i);

       someArray[i] = newObject.returnSomeStringInTheObject();

repeat

现在,我有一个字符串数组。例如,我可以访问在 i=3 创建的对象吗?

每个字符串都不一样。

4

5 回答 5

4

因为您的每个字符串都不同,所以我会使用一个映射,例如:

final Map<String, Object> someMap = new HashMap<String, Object>();

// some loop (i = 1 to 10)

   Object newObject = new Object("hello" + i);
   someMap.put(newObject.returnSomeStringInTheObject(), newObject);

// repeat

然后,您可以使用地图从其“someString”中取回对象

于 2013-04-07T09:34:23.607 回答
3

保存一个将字符串从数组映射到实际对象的 HashMap 怎么样?如果您不在代码中的某处保留对该对象的引用,则垃圾收集器可能会将其从内存中删除,并且您无法控制此过程。即使当您想要访问它时它还没有被删除,您也没有可以使用的实际参考。

于 2013-04-07T09:34:15.160 回答
2

当您在循环中进行下一次迭代时,您的对象将无法再访问,因此您无法以任何方式访问它。不过,您可以创建某种从对象类到字符串的转换器,反之亦然。这样,您将能够重建对象:

public getObjectFromString(String string) {
    return YourClass.createFromString(string);
}

public getStringFromObject(YourClass obj) {
    Return obj.toString();
}
于 2013-04-07T09:33:19.437 回答
1

所以基本上你想将实例的字符串表示形式转换为对象。

覆盖类中的 toString 方法:这将创建对象的字符串表示。

public String toString(){
   return "attr1 :"+ value1
          + "; attr2 :"+ value2;  
} 

取回价值;您需要解析对象的字符串表示并创建新对象。

String x = someArray[i]; //read toString value from array

在上述情况下,每个属性都用分号分隔。并且属性名和值用冒号(:)分隔。因此,您可以使用您的 String 实用程序进行解析。

于 2013-04-07T09:30:02.340 回答
1

你问的是不可能的。一旦退出创建对象的循环,对象就会消失,除非您将它们存储在某个地方,您说您不能这样做。

但是,您可以构造一个与前一个对象相同的新对象

 class myObject {
     public myObject(String str){
          someStringInThisObject = str
     }
}

然后,在您的主要课程中:

 myObject m = new myObject(someArray[i]);
于 2013-04-07T09:37:15.410 回答