יצירת מקבלי הגמר הסטטי של Java בקוטלין

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

במדריך מהיר זה נדון גמר סטטי משתנים ב- Java והמקבילה שלהם ב- Kotlin.

בג'אווה, מכריז גמר סטטי משתנים עוזרים לנו ליצור קבועים. ובקוטלין יש לנו כמה דרכים להשיג את אותה מטרה.

2. בתוך לְהִתְנַגֵד

ראשית, בואו נסתכל על הכרזת קבועים בקוטלין לְהִתְנַגֵד:

אובייקט TestKotlinConstantObject {const val COMPILE_TIME_CONST = 10 val RUN_TIME_CONST: Int init {RUN_TIME_CONST = TestKotlinConstantObject.COMPILE_TIME_CONST + 20; }}

בדוגמה שלעיל, אנו משתמשים const val להכריז על קבוע זמן הידור, ו val להכריז על קבוע זמן ריצה.

אנו קוראים להם בקוד הקוטלין שלנו באותו אופן כמו Java גמר סטטי משתנים:

@Test fun givenConstant_whenCompareWithActualValue_thenReturnTrue () {assertEquals (10, TestKotlinConstantObject.COMPILE_TIME_CONST) assertEquals (30, TestKotlinConstantObject.RUN_TIME_CONST)}

שים לב, עם זאת, איננו יכולים להשתמש TestKotlinConstantObject.RUN_TIME_CONST בקוד ג'אווה. ה val מילת מפתח בפני עצמה, בלי קונסט מילת מפתח, אינו חושף שדות קוטלין כ פּוּמְבֵּי לשיעורי Java להתקשר.

זו הסיבה שיש לנו @JvmField לחשוף val משתנים ליצירת ידידותית ל- Java גמר סטטי משתנים:

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

אנחנו יכולים לקרוא לזה ממש כמו א const val משתנה בשיעורי Kotlin ו- Java:

assertEquals (20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

בנוסף, יש לנו גם @JvmStatic, שנוכל להשתמש בו באופן דומה לזה @JvmField. אבל מאז אנחנו לא משתמשים בזה @JvmStatic הופך את הנכס לנגיש סטָטִי בג'אווה אך לא המשתנה עצמו.

3. בתוך קוטלין מעמד

ההכרזה על קבועים אלה דומה בקוטלין מעמד, אבל בתוך שלה אובייקט נלווה:

class TestKotlinConstantClass {אובייקט נלווה {const val COMPANION_OBJECT_NUMBER = 40}}

ונוכל לעשות את אותו הדבר כמו קודם:

assertEquals (40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. מסקנה

במאמר זה עברנו את השימוש ב- קונסט, val, ו @JvmField בקוטלין כדי ליצור משתנים סופיים סטטיים.

כמו תמיד, ניתן למצוא את הקוד ב- GitHub.