Я пытаюсь определить тип поля объекта. Я не знаю тип объекта, когда он передается мне, но мне нужно найти поля, которые равны longs. Достаточно легко отличить коробочные 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.
Любые идеи?