Tentukan sama ada Objek Jenis Primitif

1. Gambaran keseluruhan

Kadang-kadang kita perlu menentukan apakah objek itu jenis primitif, terutama untuk jenis primitif pembungkus. Walau bagaimanapun, tidak ada kaedah terbina dalam JDK standard untuk mencapainya.

Dalam tutorial ringkas ini, kita akan melihat bagaimana menerapkan penyelesaian menggunakan Java inti. Kemudian kita akan melihat bagaimana kita dapat mencapainya dengan menggunakan beberapa perpustakaan yang biasa digunakan.

2. Kelas Primitif dan Pembungkus

Terdapat sembilan objek yang telah ditentukan untuk mewakili lapan primitif dan jenis kekosongan di Jawa. Setiap jenis primitif mempunyai Kelas Pembungkus yang sesuai.

Untuk mengetahui lebih lanjut mengenai Primitif dan Objek , sila lihat artikel ini.

The java.lang.Class . Kaedah isPrimitive () dapat menentukan sama ada objek yang ditentukan mewakili jenis primitif. Walau bagaimanapun, ia tidak berfungsi pada pembungkus untuk primitif.

Contohnya, pernyataan berikut kembali palsu :

Integer.class.isPrimitive(); 

Sekarang mari kita lihat pelbagai cara untuk mencapainya.

3. Menggunakan Java Core

Pertama, mari tentukan pemboleh ubah HashMap yang menyimpan kelas pembungkus dan jenis primitif:

private static final Map
    
      WRAPPER_TYPE_MAP; static { WRAPPER_TYPE_MAP = new HashMap
     
      (16); WRAPPER_TYPE_MAP.put(Integer.class, int.class); WRAPPER_TYPE_MAP.put(Byte.class, byte.class); WRAPPER_TYPE_MAP.put(Character.class, char.class); WRAPPER_TYPE_MAP.put(Boolean.class, boolean.class); WRAPPER_TYPE_MAP.put(Double.class, double.class); WRAPPER_TYPE_MAP.put(Float.class, float.class); WRAPPER_TYPE_MAP.put(Long.class, long.class); WRAPPER_TYPE_MAP.put(Short.class, short.class); WRAPPER_TYPE_MAP.put(Void.class, void.class); }
     
    

Sekiranya objek tersebut adalah kelas pembungkus primitif, kita dapat mencarinya dari pemboleh ubah HashMap yang telah ditentukan dengan kaedah java.utils.Map.ContainsKey () .

Sekarang kita boleh membuat kaedah utiliti mudah untuk menentukan apakah sumber objek jenis primitif:

public static boolean isPrimitiveType(Object source) { return WRAPPER_TYPE_MAP.containsKey(source.getClass()); }

Mari kita sahkan bahawa ini berfungsi seperti yang diharapkan:

assertTrue(PrimitiveTypeUtil.isPrimitiveType(false)); assertTrue(PrimitiveTypeUtil.isPrimitiveType(1L)); assertFalse(PrimitiveTypeUtil.isPrimitiveType(StringUtils.EMPTY));

4. Menggunakan Apache Commons - ClassUtils. isPrimitiveOrWrapper ()

Apache Commons Lang mempunyai ClassUtils . kaedah isPrimitiveOrWrapper yang boleh digunakan untuk menentukan sama ada kelas adalah primitif atau pembungkus primitif .

Pertama, mari tambah pergantungan commons-lang3 dari Maven Central ke pom.xml kami :

 org.apache.commons commons-lang3 3.5 

Kemudian mari kita mengujinya:

assertTrue(ClassUtils.isPrimitiveOrWrapper(Boolean.False.getClass())); assertTrue(ClassUtils.isPrimitiveOrWrapper(boolean.class)); assertFalse(ClassUtils.isPrimitiveOrWrapper(StringUtils.EMPTY.getClass()));

5. Menggunakan Jambu Batu - Primitif. isWrapperType ()

Jambu batu memberikan pelaksanaan yang serupa melalui kaedah Primitives.isWrapperType .

Sekali lagi, mari tambahkan kebergantungan dari Maven Central terlebih dahulu:

 com.google.guava guava 29.0-jre 

Begitu juga, kita boleh mengujinya dengan menggunakan:

assertTrue(Primitives.isWrapperType(Boolean.FALSE.getClass())); assertFalse(Primitives.isWrapperType(StringUtils.EMPTY.getClass()));

Walau bagaimanapun, kaedah Primitives.isWrapperType tidak akan berfungsi pada kelas primitif, kod berikut akan kembali palsu:

assertFalse(Primitives.isWrapperType(boolean.class));

6. Kesimpulannya

Dalam tutorial ini, kami menggambarkan bagaimana menentukan apakah objek dapat mewakili jenis data primitif menggunakan implementasi kita sendiri menggunakan Java. Kemudian kami melihat beberapa perpustakaan popular yang menyediakan kaedah utiliti untuk mencapainya.

Kod lengkap boleh didapati di Github.