יצירת מקבלי הגמר הסטטי של 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.