假设我有10个物体。现在,我创建它们,我存储它们的唯一方法是在该对象中具有某些值的String数组。我不会将实际对象本身存储在任何地方。有什么办法可以根据字符串数组访问对象吗?
String[] someArray = new String[10];
some loop (i = 1 to 10)
Object newObject = new Object("hello" + i);
someArray[i] = newObject.returnSomeStringInTheObject();
repeat
现在,我有一个字符串数组。我可以访问在i = 3处创建的对象吗?
每个字符串都不同。
答案 0 :(得分: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”
返回一个对象答案 1 :(得分:3)
如何保存将字符串从数组映射到实际对象的HashMap? 如果您没有在代码中的某处保留对该对象的引用,则可能会被垃圾回收器从内存中删除,并且您无法控制此进程。即使它还没有删除,但是当你想要访问它时,你将没有实际的参考资料,你可以使用它。
答案 2 :(得分:2)
当您在循环中进行下一次迭代时,您的对象不再可访问,因此您无法以任何方式访问它。不过,您可以创建从对象类到字符串的某种转换器,反之亦然。这样,您就可以重建对象:
public getObjectFromString(String string) {
return YourClass.createFromString(string);
}
public getStringFromObject(YourClass obj) {
Return obj.toString();
}
答案 3 :(得分:1)
所以基本上你想将实例的字符串表示转换为Object。
覆盖类中的toString方法:这将创建对象的String表示。
public String toString(){
return "attr1 :"+ value1
+ "; attr2 :"+ value2;
}
获得价值;您需要解析对象的String表示并创建新对象。
String x = someArray[i]; //read toString value from array
在上面的案例中,每个属性都用分号分隔。属性名称和值由冒号(:)分隔。因此,您可以使用String实用程序进行解析。
答案 4 :(得分:1)
你所要求的是不可能的。一旦你退出创建对象的循环,对象就会消失,除非你将它们存储在某个地方,你说你不能这样做。
但是,您可以构造一个与前一个对象相同的新对象
class myObject {
public myObject(String str){
someStringInThisObject = str
}
}
然后,在你的主要课程中:
myObject m = new myObject(someArray[i]);