equals メソッドと hashCode メソッドをすべてオーバーライドして、次のようにするクラスがいくつかあります。
final class MyClass {
public void statelessMethod() {
// ...
}
@Override
public boolean equals(Object obj) {
return obj instanceof MyClass;
}
@Override
public int hashCode() {
return MyClass.class.hashCode();
}
}
クラスには常に変化する状態はありませんが、new MyClass().equals(new MyClass())
常に真でなければならないという考えです。
私が探しているのは、ボイラープレートを可能な限り削除する、記述 (または再利用) できるコード パターンまたはユーティリティ クラスです。
バックグラウンド
このパターンを Guice モジュールの定義に使用しているため、複数のモジュールが UtilModule に依存している場合 (たとえば)、同じ型の複数のバインディングによってエラーが発生することはありません。
余分な背景
このパターンは Guice サーブレット InternalServletModule から複製されたもので、これを使用して、そのクラスの一部として提供されるバインディングを複製することなく、インジェクター構成で複数の ServletModule モジュールを指定できるようにします。
いくつかのコメントに答える実際の使用例
final class UtilModule extends AbstractModule {
public void configure() {
// bindings and things
}
@Override
public boolean equals(Object obj) {
return obj instanceof UtilModule;
}
@Override
public int hashCode() {
return UtilModule.class.hashCode();
}
}
UtilModule に依存する複数のモジュールの例 (コメントから)
class Module1 extends AbstractModule {
@Override
protected void configure() {
bind(SomeClass.class).to(SomeClassImpl.class);
install(new UtilModule()); // needed by SomeClassImpl
}
}
class Module2 extends AbstractModule {
@Override
protected void configure() {
bind(MyService.class).in(Singleton.class);
install(new UtilModule()); // needed by MyService
}
}
class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(
new Module1(),
new Module2());
// ...
}
}