【发布时间】:2013-03-05 13:04:16
【问题描述】:
我正在尝试使用要传递给 ArrayAdapter 的对象填充 ArrayList(最终)。我已经将一些代码提取到一个小型测试项目中来说明问题。
我有一个名为 Rules 的类,它有两个成员,Gender 和 Age (Rules.Java)。在 MyArrayTest 类中,我正在创建规则对象的实例并将它们添加到 rule_parts ArrayList。当我遍历数组时,循环执行预期的次数,但会复制最后一个元素。请有人指出原因。
Rules.Java
public class Rules {
public static String Gender;
public static Integer Age;
public Rules(String G, Integer C) {
//super();
Gender = G;
Age = C;
}
}
主类 - MyArrayTest.java
import java.util.ArrayList;
public class MyArrayTest {
private static ArrayList<Rules> rule_parts = new ArrayList<Rules>();
public static void main(String[] args) {
// Rules Array
rule_parts.add(new Rules("Male",25));
rule_parts.add(new Rules("Female",22));
System.out.printf("\n\nRules:\n\n");
for (Rules r : rule_parts) {
System.out.printf (r.Gender + "\n");
System.out.printf(r.Age + "\n");
}
}
}
输出如下:
规则:
女性 22
女性 22
【问题讨论】:
-
从你的类变量中移除
static关键字。正如您现在拥有的那样,您已经定义了“全局”状态 - 对于类的 all 实例,类中的值也将始终是您上次设置的值。一般来说,不要将任何类变量设为静态,除非您知道自己在做什么并且有非常这样做的充分理由。 -
除了 Perception 所说的:您似乎完全误解了
static所做的事情。请阅读 Java 教程以了解这一点。