0

アプリケーションでの使用に奇妙な問題がありMapます。

オブジェクトのリストがあります - Table。各オブジェクトには、別のクラスのオブジェクトのマップであるフィールドがあります。

public class Table {

    private Map<Integer, MyObject> objectsMap = new HashMap<Integer, MyObject>();

    public void addToMap(int i, MyObject mOrder)
    {
        objectsMap.put(i, mOrder);
    }

    public MyObject getObject(int poz)
    {
        return objectsMap.get(poz);
    }

}

public class MyObject {

    private int info1;
    private int info2;

    public void setInfo(int i1, int i2)
    {
        this.info1 = i1;
        this.info2 = i2;
    }

    public int[] getInfos()
    {
        return new int[]{this.info1, this.info2};
    }

}

次に、メインのアクティビティで初期化を行います。

private List<Table> tableList = new ArrayList<Table>();

//...

public void initTableObject(Table myTable)
{
    MyObject newObject = new MyObject();
    newObject.setInfo(1,2);
    myTable.addToMap(1, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(3,4);
    myTable.addToMap(2, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(5,6);
    myTable.addToMap(3, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(7,8);
    myTable.addToMap(4, newObject);
}

問題は、値を確認したいときです:

for (Table table : tableList) {
    int[] info = table.getObject(4).getInfos();
    Log.d("TAG","4: {" + info[0] + ", " + info[1] + "}");
}

Table オブジェクトが 1 つあれば、すべて問題ありません。問題は、オブジェクトが 2 つ以上あるときに始まります。いくつかの相互作用の後に2つの要素がある場合(この場合は重要ではありません)、問題があります。

毎回、オブジェクトのマップの最後のオブジェクト、つまりnewObject最初のテーブル オブジェクトの 4 番目のオブジェクトの値は、2 要素の最初のオブジェクトの値に等しくなります。2 番目の Table オブジェクトとその MyObject オブジェクトは問題ありません。

私はすべてを試していましたが、他に何も表示されないため、ここで質問しています。

ここで何が起こっているのか、このエラーが発生していることを誰かに教えてもらえますか?

4

2 に答える 2

0

私はそれをチェックしてきましたが、それは私にとって完璧に機能します。問題は Table の定義方法 (示されているコード) ではなく、使用方法にあると言えます。最初のテーブルに追加した後、おそらく MyObject のインスタンスを変更しています。

于 2013-08-08T15:52:40.037 に答える