Hey guys,
Recently I have found a problem with the way I'm trying to initialize and share a class. I'll explain better the problem I have:
I have two programs:
- AttributeManager(program to create attributes for character, an example of attribute is "Health")
- Game Client
So on AttributeManager I create some attributes like Health, Mana, Energy, etc. There is shared Serializable class, which represents each attribute, let's say:
1 2 3 4 5 6 7
| class Attribute implements Serializable { private String name; private int intial_value; public Attribute(){} } |
After creating all the "attributes" I store them to Hashtable <String, Attribute> attribute_list and save it to file, since Hashtable is serializable it's no problem opening it in the other application.
In game, I initialize the list when loading game client to the class Data, reading the entry of file stored by AttributeManager
1 2 3 4 5 6 7
| class Data { public static Hashtable <String, Attribute> attribute_list;
private Data(){} } |
Now where the problem is:
What I'm doing is the following, when I initialize main character(it also has attribute_list variable) i set the list stored in Data.attribute_list, when some other character does login, I also use Data.attribute_list to intialize it's attribute list.. The problem is that attributes become shared - LOGICALLY. So I did found another solution, which is reading from file everytime I instantiate new character, but I think from the performance side it's not the best solution... Is there any other way of doing it, simply by loading once from file?
I was thinking in creating a method copy(), which would iterate hashtabe and copy the values and not the entire class...
Thanks in advance.