状態をあらわす
2008/04/10
2008/04/11
java
状態
えーと、僕が状態、状態といっているのは、システムがその瞬間にある状態のことでして、えーと、そういうことです。
状態ってたとえば、その瞬間のメモリの《状態》、データベースにある全ての《状態》であったり、ユーザがある権限でログインして、何かしらの操作をするその瞬間であったりします。しつこく考えると、この瞬間と同じ《状態》は二度とないと思います。ですが、そんなこといってると、プログラムかけなくなってしまいそうです。
システムをこつこつ作っていく際に、相手にする《状態》は、もちろん再現可能な《状態》であります。あたりまえといえば、あたりまえですね。この《状態》を把握できてないと、突然のトラブルでロケットが空をとべなくなったり、バグだとさわがれたりします。へっぽこといわれたりもするでしょう。
この《状態》を正しく遷移させていくのが多分に、おおくのシステムの行っていることだと思います。
と、まえおきをしつつ、《状態》を表現してみます。
public class TestState {
public static void main(String[] args) {
String text = "日本語日本語";
Object[] s1 = { text, "a", "B", 11, new State(1, 2, 3) };
Object[] s2 = { new State(1, 3, 3), text, "a", "B", 11 };
Object[] s3 = { text, "a", "B", 11, };
State state = new State(s1);
State state2 = new State(s2);
State state3 = new State(s3);
System.out.println(state.hashCode());
System.out.println(state2.hashCode());
System.out.println(state3.hashCode());
System.out.println(state.equals(state2));
}
public static int state(Object... objects) {
int i = 0;
for (Object o : objects)
i += i ^ o.hashCode();
return i;
}
static class State {
final Object[] objects;
final int hashCode;
public State(Object... objects) {
this.objects = objects;
this.hashCode = TestState.state(objects);
}
public int state(){
return this.hashCode;
}
@Override
public int hashCode() {
return this.hashCode;
}
@Override
public boolean equals(Object obj) {
if (hashCode() == obj.hashCode()) {
return true;
}
return false;
}
}
}
それで、どういう目的かといいますと、複数のパラメーターで一個の状態を表現したいわけです。
State state = new State(new Object[]{ text, "a", "verified", 11, true, "COMPLETE"});
まあ、それだけなんですけどね。単純にデータをもってるだけじゃんっていわれそうですね。Orz...
追記:
だめだめ
: