質問
私の把握に努めると共に、インターネットブラウザの分野では、オブジェクトです。私は非常に良いのではないかと思い型のオブジェクトに渡されるときに私には見分野 long
s.できる箱入り 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
}
}
A hacky方、仕事では、この:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class) || clazz.getName().equals("long")) {
// found one
}
}
うに掃除をすることがあります。がある場合に最良の方法はかることが必要な物を受けているのみ利用 Long
( long
いります。
そのアイデア?
解決
あなたが長いプリミティブをチェックするために間違った定数を使用している - Long.TYPE
を使用し、互いのプリミティブ型は、同様に、ラッパーの名前の定数を見つけることができます。例えば:Byte.TYPE
、Character.TYPE
など
他のヒント
o.getClass().getField("fieldName").getType().isPrimitive();
あなただけ使用することができます。
boolean.class
byte.class
char.class
short.class
int.class
long.class
float.class
double.class
void.class
をまったくこのチェックを行うなぜあなたは、なぜあなたは気にしない、リフレクションを使用している場合。あなたは、フィールドがプリミティブ型であるかどうかを知る必要がありませんので、取得/設定メソッドは常にオブジェクトを使用します(NULL値にプリミティブ型を設定しようとしない限り。)
実際には、この方法のために(取得)、あなたはそれがどのタイプを知っている必要はありません。あなたが行うことができます。
// any number type is fine.
Number n = field.get(object);
long l = n.longValue();
それはあなたが行うことができますNumber型である場合は、あなたがわからない場合は、
Object o = field.get(object); // will always be an Object or null.
if (o instanceof Number) {
Number n = (Number) o;
long l = n.longValue();
検出分野
long
タイプを使用long.class
またはLong.TYPE
.検出分野
Long
タイプを使用Long.class
.
例:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
// to detect both Long and long types
if (Long.class.equals(clazz) || long.class.equals(clazz)) {
// found one
}
}
通知:
Long.TYPE
は静定員に相当 long.class
.
スニペットコンポーネントに関連するワコム Long
クラス
/** * The {@link Class} object that represents the primitive type {@code long}. */ @SuppressWarnings("unchecked") public static final Class<Long> TYPE = (Class<Long>) long[].class.getComponentType();
またチェック 答え のための 差Integer.class および整数です。タイプ 質問