מפעיל המעי הגס הכפול בג'אווה 8

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

במאמר מהיר זה נדון ב מפעיל מעי גס כפול ( :: ) ב- Java 8 ועברו על התרחישים שבהם ניתן להשתמש במפעיל.

2. ממבדות למפעיל כפול מעי גס

עם ביטויים של Lambdas, ראינו שקוד יכול להיות תמציתי מאוד.

למשל, ל ליצור משווה, התחביר הבא מספיק:

משווה c = (מחשב c1, מחשב c2) -> c1.getAge (). CompareTo (c2.getAge ()); 

ואז, עם הסקת סוג:

משווה c = (c1, c2) -> c1.getAge (). CompareTo (c2.getAge ());

אך האם נוכל להפוך את הקוד שלמעלה לביטוי וקריא עוד יותר? בוא נראה:

Comparator c = Comparator.comparing (מחשב :: getAge); 

השתמשנו ב- :: מפעיל כקצר עבור lambdas המכנה שיטה ספציפית - לפי שם. והסוף, התוצאה היא כמובן תחביר קריא עוד יותר.

3. איך זה עובד?

במילים פשוטות מאוד, כאשר אנו משתמשים בהפניה לשיטה - הפניית היעד ממוקמת לפני המפריד :: ושם השיטה ניתן אחריה.

לדוגמה:

מחשב :: getAge;

אנו בוחנים התייחסות לשיטה לשיטה getAge מוגדר ב מַחשֵׁב מעמד.

לאחר מכן נוכל לפעול עם פונקציה זו:

פונקציה getAge = מחשב :: getAge; שלם computerAge = getAge.apply (c1); 

שימו לב שאנחנו מתייחסים לפונקציה - ואז מחילים אותה על סוג הטיעון הנכון.

4. הפניות לשיטה

אנו יכולים להשתמש היטב במפעיל זה בתרחישים לא מעטים.

4.1. שיטה סטטית

ראשית, אנו נעשה שימוש שיטת תועלת סטטית:

רשימת מלאי = Arrays.asList (מחשב חדש (2015, "לבן", 35), מחשב חדש (2009, "שחור", 65)); invent.forEach (ComputerUtils :: תיקון); 

4.2. שיטת מופע של אובייקט קיים

לאחר מכן, בואו נסתכל על תרחיש מעניין - הפניה לשיטה של ​​מופע אובייקט קיים.

אנו נשתמש במשתנה מערכת.הַחוּצָה - אובייקט מסוג PrintStream התומך ב- הדפס שיטה:

מחשב c1 = מחשב חדש (2015, "לבן"); מחשב c2 = מחשב חדש (2009, "שחור"); מחשב c3 = מחשב חדש (2014, "שחור"); Arrays.asList (c1, c2, c3) .forEach (System.out :: print); 

4.3. שיטת מופע של אובייקט שרירותי מסוג מיוחד

מחשב c1 = מחשב חדש (2015, "לבן", 100); מחשב c2 = MacbookPro חדש (2009, "שחור", 100); רשימת מלאי = Arrays.asList (c1, c2); inventaris.forEach (מחשב :: turnOnPc); 

כפי שאתה יכול לראות, אנו מתייחסים ל turnOnPc שיטה לא על מקרה ספציפי, אלא על הסוג עצמו.

בשורה 4 שיטת המופע turnOnPc ייקרא לכל אובייקט של מְלַאי.

וזה אומר באופן טבעי - בשביל c1 השיטה turnOnPc ייקרא על מַחשֵׁב מופע ועבור c2 עַל מאקבוק פרו למשל.

4.4. שיטת סופר של אובייקט מיוחד

נניח שיש לך את השיטה הבאה ב- מַחשֵׁב מעמד-על:

public doubleValue כפול (InitialValue כפול) {return initialValue / 1.50; } 

וזה ב מאקבוק פרו תת מחלקה:

@ Override ציבור כפול חישוב ערך (כניסה ראשונית כפולה) {פונקציית פונקציה = סופר :: חישוב ערך; PcValue כפול = function.apply (initialValue); החזר pcValue + (initialValue / 10); } 

קריאה ל חישוב ערך שיטה על א מאקבוק פרו למשל:

macbookPro.calculateValue (999.99); 

יפיק גם קריאה ל חישוב ערך על מַחשֵׁב מעמד-על.

5. הפניות קונסטרוקטור

5.1. צור מופע חדש

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

ממשק ציבורי ממשק ציבורי @FunctionalInterface {מחשב ליצור (); } ממשק מחשב c = מחשב :: חדש; מחשב מחשב = c.create (); 

מה אם יש לך שני פרמטרים בבנאי?

BiFunction c4Function = מחשב :: חדש; מחשב c4 = c4Function.apply (2013, "לבן"); 

אם הפרמטרים הם שלושה או יותר עליכם להגדיר ממשק פונקציונלי חדש:

ממשק ממשק @FunctionalInterface TriFunction {R להחיל (A a, B b, C c); ברירת מחדל TriFunction andThen (פונקציה אחרי) {Objects.requireNonNull (אחרי); להחזיר (A a, B b, C c) -> לאחר החל (החל (a, b, c)); }} 

לאחר מכן, אתחל את האובייקט שלך:

TriFunction c6Function = מחשב :: חדש; מחשב c3 = c6Function.apply (2008, "שחור", 90); 

5.2. צור מערך

לבסוף, בואו נראה כיצד ליצור מערך של מַחשֵׁב אובייקטים עם חמישה אלמנטים:

פונקציה computerCreator = מחשב [] :: חדש; מחשב [] computerArray = computerCreator.apply (5); 

6. מסקנה

כפי שהתחלנו לראות, מפעיל המעי הגס הכפול - שהוצג בג'אווה 8 - יהיה שימושי מאוד בתרחישים מסוימים, ובמיוחד בשילוב עם זרמים.

כמו כן, די חשוב לבחון ממשקים פונקציונליים להבנה טובה יותר של המתרחש מאחורי הקלעים.

השלם קוד מקור לדוגמא זמין בפרויקט GitHub זה - זהו פרויקט Maven ו- Eclipse כך שניתן לייבא אותו ולהשתמש בו כמות שהוא.


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