ホームページ >Java >&#&チュートリアル >Java でオブジェクトがプリミティブ値のラッパー タイプであるかどうかを判断するにはどうすればよいですか?

Java でオブジェクトがプリミティブ値のラッパー タイプであるかどうかを判断するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-02 05:34:30433ブラウズ

How to Determine if an Object is a Wrapper Type for Primitive Values in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。