boolean java.util.List.remove(Object object)
メソッドが false を返すのはいつ、なぜですか?
ドキュメントの状態
[メソッドの戻り値] この List がこの操作によって変更された場合は true、そうでない場合は false。
リストで操作が有効にならないのはなぜですか?
(注:私が利用しているリストの実装はですArrayList
)
更新:
削除しようとしているオブジェクトはリストに存在します。List
クラスを(したがって引数this
)に追加し、 (this
同じクラス内で) remove メソッドに渡します。そのため、オブジェクトはリストに存在する必要があります (または存在しませんか?)。
更新:
これがコードです。メソッドをご覧くださいdelay()
。からそれぞれのクラスを削除しようとする場所がありList
ます。
public class Timer extends Object {
private static List<Timer> allTimers;
private Long startTime;
private int delayTime;
private boolean registered;
String name;
public Timer(String name) {
this.name = name;
this.registered = true;
allTimers.add(this);
Log.d("SpaceDroid", "Foo: Created timer: " + name + " Size: " + this.allTimers.size());
}
public Timer(String name, int delayTime) {
this(name);
this.delayTime = delayTime;
}
public void setDelayTime(int delayTime) {
this.delayTime = delayTime;
}
public boolean delay() {
if(this.startTime == null) {
this.startTime = System.currentTimeMillis();
}
if(startTime + this.delayTime < System.currentTimeMillis()) {
if(this.registered) {
Log.d("SpaceDroid", "Foo: Trying to remove timer: " + name);
if(this.allTimers.remove(this)) {
Log.d("SpaceDroid", "Foo: Successfully removed timer: " + name);
}
else {
Log.d("SpaceDroid", "Foo: Did not remove timer: " + name);
}
}
return true;
}
else {
return false;
}
}
// The same as resume, just renew the startTime
public void reset() {
this.startTime = null;
this.registered = true;
this.allTimers.add(this);
}
public void resume() {
this.startTime = System.currentTimeMillis();
}
public void pause() {
// Check if timer is still running
if(!this.delay()) {
// Calculate new delayTime
delayTime = (int) ((startTime + this.delayTime) - System.currentTimeMillis());
Log.d("SpaceDroid", "Foo: New delay time: " + delayTime + " for timer: " + name);
}
}
public static void resumeAllTimers() {
List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
timer.resume();
}
}
public static void pauseAllTimers() {
List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
timer.pause();
}
}
public static void disposeAllTimers() {
Timer.allTimers.clear();
Timer.allTimers = null;
}
public static void initializeAllTimers() {
allTimers = new ArrayList<Timer>();
}
}