LinkedListに繋げたクラスの中身を書き換える

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tama

LinkedListに繋げたクラスの中身を書き換える

#1

投稿記事 by tama » 11年前

androidプログラミングの館で、「FPSを表示させる」の項目の中で
GameMgrクラスがあり、↓の6行目でLinkedListというものを使用していました。

コード:

public class GameMgr {

        private LinkedList<Task> _taskList = new LinkedList<Task>(); //タスクリスト
        
        GameMgr(){
                _taskList.add( new FpsController() );
        }
        
        public boolean onUpdate() {
                for(int i=0; i<_taskList.size(); i++){
                        if(_taskList.get(i).onUpdate() == false){ //更新失敗なら
                                _taskList.remove(i);              //そのタスクを消す
                                i--;
                        }
                }
                return true;
        }

        public void onDraw(Canvas c) {
                c.drawColor(Color.WHITE);       //白で塗りつぶす
                for(int i=0; i<_taskList.size(); i++){
                        _taskList.get(i).onDraw(c);//描画
                }
        }

}
そこで思ったのですが、例えば上の場合で追加された_taskList内のFpsControllerに対して
インスタンスのように中身の変数を入れ替えたりする事が出来るのでしょうか?
(クラス名.変数名=10;みたいな感じのです)

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: LinkedListに繋げたクラスの中身を書き換える

#2

投稿記事 by beatle » 11年前

質問の意図が良くわかりませんが、こういうことでしょうか?

コード:

_taskList.get(i).hoge = 10;
それとも、リストのi番目の要素を削除し、同じ場所に新しいTask型のインスタンスを格納したいということでしょうか。

コード:

ListIterator<Task> it = _taskList.listIterator(i);
it.next();
it.set(新しいインスタンス);
注)このコードはJava SE APIドキュメントを読んだだけで書いたので間違っているかもしれません。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: LinkedListに繋げたクラスの中身を書き換える

#3

投稿記事 by bitter_fox » 11年前

beatle さんが書きました: それとも、リストのi番目の要素を削除し、同じ場所に新しいTask型のインスタンスを格納したいということでしょうか。

コード:

ListIterator<Task> it = _taskList.listIterator(i);
it.next();
it.set(新しいインスタンス);
注)このコードはJava SE APIドキュメントを読んだだけで書いたので間違っているかもしれません。
補足です。間違ってはいませんがList#setを使った方が楽に書けて若干(本当に極々僅かだけ)早いです。

コード:

_taskList.set(i, 新しいインスタンス);

tama

Re: LinkedListに繋げたクラスの中身を書き換える

#4

投稿記事 by tama » 11年前

コード:

    _taskList.get(i).hoge = 10;
_taskListに追加されたクラスをget(i)で取得して、
そのクラス内にある変数hogeに10を代入したい、といった感じにしたいですが、
実際にやろうとするとクラス内変数(関数)を選ぶことが出来ないのです。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: LinkedListに繋げたクラスの中身を書き換える

#5

投稿記事 by bitter_fox » 11年前

tama さんが書きました:

コード:

    _taskList.get(i).hoge = 10;
_taskListに追加されたクラスをget(i)で取得して、
そのクラス内にある変数hogeに10を代入したい、といった感じにしたいですが、
実際にやろうとするとクラス内変数(関数)を選ぶことが出来ないのです。
恐らく参照できないのはFpsControllerなどのTaskで定義されていないメンバなのではないでしょうか?
これは_taskList.get(i)の戻り値がTaskとなっており、そのTaskの範囲で参照を解決しようとしているためです。

FpsControllerなどの参照したいメンバが定義されているクラスでキャストすると参照できるようになります。この時誤ったキャストが起きないようにinstanceofを併用することをお勧めします。

コード:

Task task = _taskList.get(i);
if (task instanceof FpsController)
{
	((FpsController)task).fpsControllerMethod();
}

tama

Re: LinkedListに繋げたクラスの中身を書き換える

#6

投稿記事 by tama » 11年前

詳しい解説、ありがとうございます。おかげで理解できました。

返事が遅くなってすみません…;;

閉鎖

“C言語何でも質問掲示板” へ戻る