2

クラスの 1 つで以下のコードと同様の処理を実行しようとすると、java.lang.IllegalArgumentException: invalid ObjectId [0] が発生します。

    String s = "0_abc";
--------
private ObjectId obj; [Instance variable]
public NewClass(String s){
    String[] sarray = s.split("_");
    obj = new ObjectId(sarray[0]);
}

失敗する可能性のある理由は何ですか?

4

3 に答える 3

4

ObjectId クラスは (org.bson.types.ObjectId) であり、MongoDB Java ドライバーで使用されていると仮定します。この例外が意味することは、ObjectId 構築の値として「0」を渡すことができないということです。

すべての文字列が正しい ObjectId 値であるとは限りません。指定された文字列で ObjectId が初期化されると、検証が行われます。たとえば、ObjectId には 24 文字の文字列が必要です。さらに制約があり、完全な検証ソース コードは GitHub リポジトリの isValid() メソッドにあります。

正しい値で ObjectId オブジェクトを作成したい場合は、次のような使用可能なファクトリ メソッドを使用して作成できます。

ObjectId obj = ObjectId.get()

これにより、自動生成された値で ObjectId が作成されます。

于 2014-05-06T19:29:14.173 に答える
1

私は次のようにObjectId obj = new ObjectId{sarray[0]};する必要があります:

ObjectId obj = new ObjectId(sarray[0]);
于 2013-05-27T04:57:59.887 に答える
0

ObjectId残念ながら、スタックトレースを送信していませんが0、引数として送信できないクラスのコンストラクターから例外がスローされたと思います。new ObjectId(sarray[0])の代わりに言いたかったこともあると思いますnew ObjectId{sarray[0]};。そうでなければ、どうやってこれをコンパイルできるのか、私にはよくわかりません。

于 2013-05-27T04:59:24.103 に答える