| (同じ利用者による、間の11版が非表示) | |||
| 11行目: | 11行目: | ||
==例== | ==例== | ||
===equalsオーバーライドの定石=== | |||
public boolean equals(Object o) { | |||
if (o == this) return true; | |||
if (o == null) return false; | |||
if(!(o instanceof Monster)) return false; | |||
Monster mon = (Monster) o; | |||
if (!this.fieldName.trim().equals(mon.fieldName.trim())) { | |||
return false; | |||
} | |||
return true; | |||
} | |||
===hashCodeオーバーライドの定石=== | ===hashCodeオーバーライドの定石=== | ||
class Hero { | class Hero { | ||
| 17行目: | 29行目: | ||
public int hashCode() { | public int hashCode() { | ||
int result = 37; | int result = 37; // 0以外ならなんでも良い | ||
result = result * 31 + name.hashCode(); | result = result * 31 + name.hashCode(); // 31:奇数かつ素数 | ||
result = result * 31 + hp.hashCode(); | result = result * 31 + hp.hashCode(); | ||
return result; | return result; | ||
| 25行目: | 37行目: | ||
===clone実装の例=== | ===clone実装の例=== | ||
クラスのクローン機能を利用するためには、Cloneableインターフェースを実装し、cloneメソッドを改めてオーバーライドする必要がある。ちなみに Cloneble はマーカーインターフェース。 | |||
public class Hero implements Clonable { | public class Hero implements Clonable { | ||
| 33行目: | 45行目: | ||
public Hero clone() { | public Hero clone() { | ||
Hero | Hero clo = new Hero(); | ||
clo.name = this.name; | |||
clo.hp = this.hp; | |||
clo.sword = this.sword; // shallow copy | |||
// | // clo.sword = this.sword.clone(); // deep copy | ||
return | return clo; | ||
} | } | ||
} | } | ||
2019年7月2日 (火) 09:45時点における最新版
私は全てのオブジェクトのスーパークラスです。
メソッド
- hashCode - オブジェクトのハッシュ・コード値を知らせる
- toString - オブジェクトの文字列表現を取得する
- clone - オブジェクトのクローンを作成する
- equals - 引数に指定されたオブジェクトが同じか真偽する
- wait - 実行中のスレッドを一時待機させる
例
equalsオーバーライドの定石
public boolean equals(Object o) {
if (o == this) return true;
if (o == null) return false;
if(!(o instanceof Monster)) return false;
Monster mon = (Monster) o;
if (!this.fieldName.trim().equals(mon.fieldName.trim())) {
return false;
}
return true;
}
hashCodeオーバーライドの定石
class Hero {
String name;
int hp;
public int hashCode() {
int result = 37; // 0以外ならなんでも良い
result = result * 31 + name.hashCode(); // 31:奇数かつ素数
result = result * 31 + hp.hashCode();
return result;
}
}
clone実装の例
クラスのクローン機能を利用するためには、Cloneableインターフェースを実装し、cloneメソッドを改めてオーバーライドする必要がある。ちなみに Cloneble はマーカーインターフェース。
public class Hero implements Clonable {
String name;
int hp;
Sword sword;
public Hero clone() {
Hero clo = new Hero();
clo.name = this.name;
clo.hp = this.hp;
clo.sword = this.sword; // shallow copy
// clo.sword = this.sword.clone(); // deep copy
return clo;
}
}