0

私はDB4oを使用しており、次のようなコードを使用するときに1つの一意のオブジェクトを確実に取得したいと考えています。

  public List<Object> getListOfObjects(final Object o){

        List<Object> result = db.query(new Predicate<Object>(){

          @Override
          public boolean match (Object arg0){

             if(arg0.equals(o)){
                return true;
              }
            else{
                return false;
             }
        });

        return result;
      }

Listオブジェクトの「result」には、1つ以下の要素を含めることが望ましいです。ただし、Javaが異なるランタイム(異なるJVM)で同じIDを持つオブジェクトを作成することは可能ではありませんか?それが発生する可能性がある場合、それは私のデータベースを台無しにするでしょう。

確かに、JavaオブジェクトがJVM間で同じIDを持つことができるかどうかについての答えがなければなりません。

-アレックス

4

1 に答える 1

1

オブジェクトの .equals() メソッドを上書きすると、等しいオブジェクトの複数のインスタンスを簡単に作成できます。equal() メソッドの全体的な目的は、「セマンティック/コンテンツ」の等価性について 2 つのオブジェクトを比較することです。一意性を検疫しません。

equal メソッドをオーバーライドしない場合は、オブジェクト ID が比較されます。(== 演算子の使用と同様)。ID は JVM 内で一意であり、同じ ID を持つオブジェクトが 2 つ存在することはありません。

ところで/オフトピック: 何千ものオブジェクトを db4o に保存してクエリを使用すると、かなり遅くなります。詳細については、こちらをご覧ください。

于 2013-03-24T01:03:56.240 に答える