オブジェクトのフィールドのタイプを判別しようとしています。オブジェクトが渡されたときのタイプはわかりませんが、long
sであるフィールドを見つける必要があります。ボックス化されたsを区別するのは簡単ですLong
が、プリミティブlong
はより難しいようです。
渡されたオブジェクトには、プリミティブではなく、のみが含まれていることを確認できますLongs
が、そうではありません。だから私が持っているのは:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class)) {
// found one -- I don't get here for primitive longs
}
}
うまくいくように見えるハッキーな方法はこれです:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class) || clazz.getName().equals("long")) {
// found one
}
}
もしあれば、これを行うためのよりクリーンな方法が本当に欲しいです。より良い方法がない場合は、受け取ったオブジェクトにLong
(ではなくlong
)のみを使用するように要求する方が、より優れたAPIになると思います。
何か案は?