Я пытаюсь определить тип поля на объекте. Я не знаю тип объекта, когда он передается мне, но мне нужно найти поля, которые являются long
. Достаточно легко различить коробку Long
s, но примитив long
кажется более сложным.Проверить тип примитивного поля
I может убедиться, что объекты, переданные мне, имеют только 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
}
}
Hacky путь, который, кажется, работает, заключается в следующем:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class) || clazz.getName().equals("long")) {
// found one
}
}
Я бы очень хотел, экологически чистого способа сделать это, если есть один. Если нет лучшего способа, то я думаю, что требуя, чтобы объекты, которые я получаю, использовали только Long
(не long
), были бы лучшим API.
Любые идеи?
Да, я смотрел на это, но мне нужно знать, если это длинный примитив не просто ли это является примитивным. т. е. сопоставлять все длинные примитивы, но не ints или байты и т. д. – macbutch
, если это примитив, я хочу установить его значение по умолчанию !!! –