【发布时间】:2012-04-07 13:06:42
【问题描述】:
假设我有一个 A 类,如下所示
public class A {
protected static float[] floatArray = null;
protected static Map<Integer, float[]> history = new HashMap<Integer,float[]>();
protected static Integer historyCount = 0;
public void runEverySecond(Populator objPopulator) {
floatArray = objPopulator.getValues();
history.put(historyCount, floatArray);
historyCount++;
}
}
B 类如下所示
public class B {
private A objA;
protected final static Populator objPopulator = new Populator();
public void run(Integer numOfTime) {
for(int i = 0; i < numOfTime; i++)
objA.runEverySecond(objPopulator);
}
}
类填充器如下所示
public class Populator {
protected float[] randomValues = new float[2];
public float[] getValues() {
randomValues[0] = //some new random float value generated for every call
randomValues[1] = //some new random float value generated for every call
return randomValues;
}
}
包含 main 的类如下所示
public class MainClass {
public static void main() {
final B objB = new B();
objB.run(10);
}
}
这是我面临的问题,地图历史记录包含地图中每个条目的相同值。我希望地图历史记录存储 objPopulator.getValues() 方法生成的所有值。我该怎么做?
一些帮助将非常明显。 提前致谢:)
A 类表示的实际代码(已删除无关代码)
public class MySuperAgent implements Agent {
protected static float[] marioFloatPos = null;
protected static Map<Integer, float[]> levelRecord = new HashMap<Integer, float[]>();
protected static Integer mapCount = 0;
/* protected static int testCount = 0;
protected static float[] testx = new float[2];
protected static float[] testy = new float[2];*/
@Override
public void integrateObservation(Environment environment) {
marioFloatPos = environment.getMarioFloatPos();
levelRecord.put(mapCount, marioFloatPos);
mapCount++;
/*if(testCount < 2){
testx[testCount] = marioFloatPos[0];
testy[testCount] = marioFloatPos[1];
testCount++;
} else {
testCount = 0;
}*/
}
}
C类代表环境对象 从类似于B类的类调用integrateObservation方法 如果我使用注释块中的代码,那么我只能记录马里奥的 x 和 y 的 2 个过去值。我需要一种方法来存储马里奥的所有 x 和 y 值:)
【问题讨论】:
-
我自己,一开始我不会处理所有这些静态问题。
-
这些东西在 Java 中称为“引用”,在其他语言中称为“指针”。如果您知道如何使用它们,它们就是美妙的东西。
-
@HovercraftFullOfEels: 哈哈.. 是的,所有这些静态数据都搞砸了.. 不幸的是,我无法更改此类中的代码,因为还有其他数量的类正在使用这些值,我无法更改代码在那些课程中,因为我不允许:(..
-
@HotLicks: 是的,引用很好,但我不能更改我不负责的其他类中的代码:)
-
@Pazuzu:您可能想向您的团队提出更灵活的代码所有权流程:martinfowler.com/bliki/CodeOwnership.html 当然,您仍然必须确保解决向后兼容性问题。
标签: java collections static hashmap