0

vargがnullに設定されている場合、Javaで可変引数のデータ型を取得するにはどうすればよいですか? getClass を使用して型を取得します。他に方法はありますか?

public void method(String name, Object ... vargs)
{
    for(Object arg : vargs)
    {
        mapType.put(arg.getClass());
        mapVal.put(arg);
    }
}

私が考えることができる唯一のことは、呼び出し関数からの注釈を使用することです。他に方法はありますか?

4

4 に答える 4

2

DBからデータをロードし、期待どおりにキャストするために、同じ問題が発生しました。残念ながら、nullにはタイプがありません。代わりに、汎用ラッパーを使用しました。これは常にnullではありませんが、null値を含めることができます。この場合、タイプ情報はラッパーのフィールドで利用できます。

于 2009-10-02T08:53:30.260 に答える
2

質問をvarargとnullの間で分割しましょう。

vararg

varargsのポイントは、データの配列を呼び出し元のコードに配列としてではなく、個々の変数または定数として送信することです。

varargsの呼び出しはあまり直感的ではない場合があります。さまざまな場合に、次のようになります。

    method("", "1", "2"); // vargs is {"1", "2"}
    method(""); // vargs is {}, the empty array (it is not null)
    method("", null); // vargs is {null}, size 1 array containing the element 'null'
    method("", (Object[])null); // vargs is null, a null instance

3番目のケースは悪い形式と見なされることに注意してください。たとえば、nullが定数(変数に格納されていない)の場合、警告が表示されます。

4番目のケースでは、本当に問題を探していることに注意してください。;-)

ヌルのクラス

ここで、null配列(前の部分でソートされた)ではなく、null値を含む配列について話します。

一般的なケース

Nullは、(一度に)任意のクラスにすることができます。ただし、instanceof常にfalseを返します。

地図に入れる

1つの値がnullの場合、何をしたいかを考える必要があります。明らかに、getClass()をnull値で呼び出すことはできません。したがって、次のいずれかを選択できます。

  1. null値をスキップし、マップに追加しないでください
  2. nullに関連付けるクラスを選択します。これは、Object、Void、または別の特定のクラスである可能性があります。関連付けは任意なので、それで何をしたいのか考えてください...
于 2009-10-02T09:22:25.553 に答える
2

あなたが使用することができます

if (arg == null)

それを特別なケースとして扱い、オブジェクトまたはボイドが適切と思われるクラスに割り当てます。

于 2009-10-02T08:50:26.773 に答える
2

あなたが何をしようとしているのか、よくわかりません。Null にはクラスがありません。呼び出し元の関数で使用される変数の静的クラスが必要な場合は、そのクラスを引数として渡すことができます。

于 2009-10-02T08:42:13.167 に答える