1

重複の可能性:
オブジェクトがプリミティブ型であるかどうかの判断

これはモロニックに聞こえるかもしれませんが、ご容赦ください。私はモロニックコードを使用しています。オブジェクトのコレクションが与えられた場合、どのプリミティブ、より正確にはプリミティブのラッパーであるかを識別するための最良の方法は何ですか。

すべてのプリミティブを印刷したいとします。

HashMap<String,Object> context = GlobalStore.getContext(); // Some bizarre, strangely populated context
for(Entry<String,Object> e : context.entrySet()){
   if(e.value() instanceof PRIMITIVE){ // What goes here?
        System.out.println(e);
   }
}

すべてのプリミティブを1つずつ列挙する以外に、これは可能ですか?

4

2 に答える 2

5

優れたGoogleGuavaプロジェクトは、次のように使用できるPrimitives.isWrapperType(Class)を提供します。

Primitives.isWrapperType(e.value().getClass())
于 2012-08-15T22:20:17.033 に答える
1

考えられる各プリミティブを確認するか、BigXxxまたはAtomicXxxがないことがわかっている場合は、次のことも確認できます。

if(e.value() instanceof Number || e.value() instanceof Boolean || e.value() instanceof Character)

のサブクラスのリストNumber

AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

プリミティブのリスト

boolean、byte、short、int、long、char、float、double

ただし、プリミティブ型が8つしかないことを考えると、それらすべてをチェックして、そのテストをユーティリティメソッドに入れることもできます。

ps:グアバと可能な重複でリンクされている回答にはVoidも含まれていることに注意してください。これは、System.out.println(void.class.isPrimitive());trueを出力するという事実と一致しています。

于 2012-08-15T22:19:11.763 に答える