您选择的词语表明您没有完全理解变量和对象的工作方式,您需要解决这个问题才能使用 Java。
如果我写:
Item myItem = new Item();
我创建了一个新对象,并且我定义了一个指向该对象的变量。
对象没有名字(它有一个ID,这是一个在运行时分配的数字;大多数程序员可以忽略它)。
变量有一个名称,myItem。变量指向对象。稍后,它可能指向不同的对象。变量可能会超出范围并不再存在,而对象继续存在。
你可能会说,“那不重要。如果我说'对象的名称',我的意思是'指向对象的变量的名称'。”
但这很重要,因为很多对象都会被不止一个变量指向:
Item myItem = new Item();
Item yourItem = myItem;
// both variables point to the same object. Neither variable is "more" the
// owner of the object than the other.
...而且很多对象不会被变量直接指向。
myList.append(new Item());
// you can't get at this new object using a direct variable.
在 Java(和大多数主流语言)中,您不能在运行时创建变量名。 唯一存在的变量名称是源代码中的字面意思。
所以没有什么是这样的:
int number = 1;
Cell cell$number = new Cell(); // can't be done!
Cell currentCell = cell1;
您也不能根据运行时数据按名称访问变量。所以没有什么可以像这样工作:
Cell cell1 = ...;
int number = 1;
Cell currentCell = cell$number; // can't be done!
这是一件好事,因为它可以让编译器验证您的代码的某些内容。
在某些语言中,您可能会使用 eval() 实现类似的目标——但您应该远离它!
这是一个提示,如果您正在编写如下代码:
Cell cell0 = new Cell(...);
Cell cell1 = new Cell(...);
...
Cell cell99 = new Cell(...);
...那你做错了什么。它可能有效,但扩展性很差。没有办法将其放入循环中。 (别担心 - 我们大多数人在开始编程时都会遇到这个问题)。
如果您使用的是数组:
Cell[] cells = new Cell[];
cells[0] = new Cell(...);
cells[1] = new Cell(...);
...
cells[99] = new Cell(...);
然后你可以使用循环代替:
for(int i = 0; i<100; i++) {
cells[i] = new Cell(...);
}
数组是最简单的“集合”对象。还有集合、列表、地图和许多更高级的集合,以满足大多数需求。
您似乎想使用字符串作为键来存储和访问对象。这样做的方法是使用地图。
Map<String,Cell> myMap = new TreeMap<String,Cell>();
myMap.put("AA", new Cell(...));
myMap.put("AB", new Cell(...));
...
Cell currentCell = myMap.get("AA");
Map 是一个接口。 TreeMap 只是一个提供Map 接口实现的类。阅读标准 JRE 提供的 Map 的各种实现。
密钥不必是String。任何实现equals() 的东西都可以用作键。
使用这个:
for(char c = 'A'; c <= 'L'; c++) {
for(char d = 'A'; d<= 'L'; d++) {
myMap.put("" + c + d, new Cell(...));
}
}
但是,既然您已经说过您需要一个网格,那么使用 2D 数组可能会更好,并在需要时将数字坐标与字母网格参考进行转换。谷歌搜索“2D array Java”,你会发现很多例子。
Cell[][] cells = new Cell[12][12];
for(int x=0; x<12; x++) {
for(int y=0; y<12; y++) {
Cell cell = new Cell();
cell.setName( "" + ('A' + x) + ('A' + y)); // perhaps
cells[x][y] = cell;
}
}
除了标准的 JRE,Map 还有很多其他的实现。例如,Spring 提供了 DefaultRedisMap,其中对象存储在 Redis 数据库中。
更一般地说 - 你在这里问了一个非常基本的问题。您应该阅读任何一本不错的 Java 书籍中关于 Collections API 的章节。