ホームページ >Java >&#&チュートリアル >Java でオブジェクトがプリミティブ値のラッパー タイプであるかどうかを判断するにはどうすればよいですか?
オブジェクトはプリミティブですか?
オブジェクトの配列を操作する場合、要素のいずれかがプリミティブであるかどうかを判断する必要がある場合があります。種類。 Class.isPrimitive() メソッドは、次の例のように、オブジェクトに対して期待される結果を提供しません:
int i = 3; Object o = i; System.out.println(o.getClass().getName() + ", " + o.getClass().isPrimitive());
これは次のように出力します:
java.lang.Integer, false
The Issue
問題は、Object[] 配列にプリミティブではなく参照が含まれていることです。したがって、オブジェクトがプリミティブ値を表す場合でも、Class.isPrimitive() は常に false を返します。
解決策
オブジェクトがオブジェクトのラッパーであるかどうかを判断するには、プリミティブ型のため、組み込みライブラリ関数はありません。ただし、カスタム ソリューションを作成することは可能です。
<code class="java">import java.util.*; public class Test { public static void main(String[] args) { System.out.println(isWrapperType(String.class)); // false System.out.println(isWrapperType(Integer.class)); // true } private static final Set<Class<?>> WRAPPER_TYPES = getWrapperTypes(); public static boolean isWrapperType(Class<?> clazz) { return WRAPPER_TYPES.contains(clazz); } private static Set<Class<?>> getWrapperTypes() { Set<Class<?>> ret = new HashSet<Class<?>>(); ret.add(Boolean.class); ret.add(Character.class); ret.add(Byte.class); ret.add(Short.class); ret.add(Integer.class); ret.add(Long.class); ret.add(Float.class); ret.add(Double.class); ret.add(Void.class); return ret; } }</code>
このソリューションでは、HashSet を使用してラッパー タイプを保存します。クラスがラッパーかどうかを確認する場合、そのクラスが含まれているかどうかを確認するためにセットが使用されます。
以上がJava でオブジェクトがプリミティブ値のラッパー タイプであるかどうかを判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。