2

簡単なチェックを行う簡単な方法があるかどうか疑問に思っていました.任意のオブジェクトをチェックし、そのプロパティの少なくとも1つが設定されているかどうかを確認する機能が必要です(nullに等しくない)。現時点では、リフレクションを使用してすべてのフィールドを取得し、それぞれを 1 つずつチェックすることでこれを実現できますが、これは非常に遅いです。これを行う別の方法はありますか?

私が考えることができる唯一の(一種のハッキーな)方法は、すべてのプロパティをnullに初期化する必要がある新しいオブジェクトを作成し、他のオブジェクトがそれと等しいかどうかを確認することです

どんな助けでも大歓迎です!

4

3 に答える 3

2

このチェックを、所有しているかどうかに関係なく、絶対にすべてのオブジェクトで一般的に機能させたいと仮定すると、リフレクションを使用することがこれを達成する唯一の方法だと思います。

実際、この種のメタプログラミング チェックは、まさにリフレクションが対象とするタイプのものです。

新しいオブジェクト インスタンスとの比較の使用は、すべてのオブジェクトの (非プリミティブ) インスタンス変数がnull構築の直後になることを保証できる場合にのみ機能します (更新-.equals()すべてのフィールドを比較するためにオーバーライドされます)。場合。

たとえば、チェックを実行したいクラスは、いくつかのインスタンス変数を初期化する引数のないコンストラクターを定義したり、一部のインスタンス変数が宣言時にインラインで初期化されたりする場合があります。

于 2013-08-29T12:47:36.590 に答える