קבע אם אובייקט הוא מסוג פרימיטיבי

1. סקירה כללית

לפעמים עלינו לקבוע אם אובייקט הוא מסוג פרימיטיבי, במיוחד עבור סוגים פרימיטיביים של עטיפה. עם זאת, אין שיטות מובנות ב- JDK הסטנדרטי להשיג זאת.

במדריך מהיר זה נראה כיצד ליישם פתרון באמצעות Java הליבה. לאחר מכן נבחן כיצד אנו יכולים להשיג זאת באמצעות כמה ספריות נפוצות.

2. פרימיטיבים ושיעורי עטיפה

ישנם תשעה עצמים שהוגדרו מראש לייצג שמונה פרימיטיביים ו- a בָּטֵל הקלד Java. לכל סוג פרימיטיבי יש מחלקת עטיפה תואמת.

ללמוד עוד על פרימיטיבים ו לְהִתְנַגֵדs, אנא עיין במאמר זה.

ה java.lang.Class.isPrimitive () השיטה יכולה לקבוע אם האובייקט שצוין מייצג סוג פרימיטיבי. עם זאת, זה לא עובד על עטיפות פרימיטיביים.

לדוגמא, ההצהרה הבאה חוזרת שֶׁקֶר:

Integer.class.is פרימיטיבי (); 

בואו נסתכל על דרכים שונות בהן אנו יכולים להשיג זאת.

3. שימוש ב- Core Java

ראשית, נגדיר א מפת גיבוב משתנה המאחסן את העטיפה ואת סוגי הפרימיטיב:

סופי סטטי פרטי WRAPPER_TYPE_MAP; סטטי {WRAPPER_TYPE_MAP = 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 (בוליאני.קלאס, בוליאני.קלאס); 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); }

אם האובייקט הוא מחלקת עטיפה פרימיטיבית, נוכל לחפש אותו מהגדר מראש מפת גיבוב משתנה עם java.utils.Map.ContainsKey () שיטה.

כעת נוכל ליצור שיטת שימוש פשוטה לקביעת מקור המקור של האובייקט:

בוליאני סטטי ציבורי isPrimitiveType (מקור אובייקט) {return WRAPPER_TYPE_MAP.containsKey (source.getClass ()); }

בואו נוודא שזה עובד כצפוי:

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

4. שימוש באפצ'י קומונס - ClassUtils.isPrimitiveOrWrapper ()

לאפאצ'י קומונס לאנג יש ClassUtils.isPrimitiveOrWrapper שיטה שבה ניתן להשתמש כדי לקבוע אם מחלקה היא פרימיטיבית או עטיפה של פרימיטיבית.

ראשית, בואו נוסיף את commons-lang3 תלות ממייבן סנטרל לשלנו pom.xml:

 org.apache.commons commons-lang3 3.5 

אז בואו לבדוק את זה:

assertTrue (ClassUtils.isPrimitiveOrWrapper (Boolean.False.getClass ())); assertTrue (ClassUtils.isPrimitiveOrWrapper (בוליאני.קלאס)); assertFalse (ClassUtils.isPrimitiveOrWrapper (StringUtils.EMPTY.getClass ()));

5. שימוש בגויאבה - פרימיטיבים.isWrapperType ()

גויאבה מספקת יישום דומה דרך Primitives.isWrapperType שיטה.

שוב, בואו נוסיף תחילה את התלות ממייבען סנטרל:

 com.google.guava גויאבה 29.0-jre 

כמו כן, אנו יכולים לבדוק זאת באמצעות:

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

אולם, ה Primitives.isWrapperType השיטה לא תפעל במחלקה הפרימיטיבית, הקוד הבא יחזיר שקר:

assertFalse (Primitives.isWrapperType (בוליאני.קלאס));

6. מסקנה

במדריך זה המחשנו כיצד לקבוע אם אובייקט יכול לייצג סוג נתונים פרימיטיבי באמצעות היישום שלנו באמצעות Java. ואז הסתכלנו על כמה ספריות פופולריות המספקות שיטות שימוש להשגת זה.

את הקוד השלם ניתן למצוא באתר Github.


$config[zx-auto] not found$config[zx-overlay] not found