Kotlin إلى Java: كيفية تحويل الملفات؟ دليل للمطورين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تحويل Kotlin إلى Java إذا كان Kotlin هو "Java الجديد"؟

\n\n

قد يبدو الأمر متناقضًا: أنت تكتب بلغة Kotlin، ثم تريد الحصول على كود Java. لماذا؟ في الواقع، هناك العديد من المواقف. قد ترث مشروعًا مكتوبًا بلغة Kotlin، لكن فريقك ليس مستعدًا بعد للانتقال إليها. أو قد تدرس Kotlin من خلال المقارنة مع Java - وهي واحدة من أكثر الطرق فعالية. أو ربما تحتاج إلى دمج مكتبة Kotlin في مشروع Java قديم، وتريد فهم كيفية عمل طريقة معينة.

\n\n

على أي حال، فإن سؤال "How to convert a Kotlin source file to a Java source file" هو أحد أكثر الأسئلة شيوعًا على Stack Overflow (آلاف المشاهدات). واليوم سنقوم بتحليله بالكامل. ستتعلم كيفية تحويل .kt إلى .java رسميًا (عبر IntelliJ IDEA) وغير رسميًا (عبر فك الترجمة)، وما هي المخاطر التي تنتظرك، وماذا تفعل إذا لم يعمل شيء.

\n\n

1. التحويل المباشر: حقيقة أم خيال؟

\n\n

نحذرك فورًا: لا يوجد تحويل عكسي "واحد لواحد" من Kotlin إلى Java. Kotlin ليست مجرد "سكر" فوق Java، بل لها دلالاتها الخاصة: أمان القيم الخالية، coroutines، دوال التوسيع، فئات البيانات. Java لا تعرف هذه الرفاهية. لذلك، سينتج أي محول كودًا تقريبيًا غالبًا ما يبدو ضخمًا ويحتوي على استدعاءات لدوال Kotlin الداخلية (مثل Intrinsics.checkNotNullParameter()).

\n\n

لكن هذا لا يعني أن المهمة غير قابلة للحل. هناك ثلاثة طرق رئيسية:

\n\n
    \n
  • فك ترجمة البايت كود - الطريقة الأكثر دقة، مدمجة في IntelliJ IDEA و Android Studio.
  • \n
  • JADX - لمطوري Android، عندما لا يكون لديك الكود المصدري ولكن لديك ملف APK.
  • \n
  • المحولات عبر الإنترنت - خيار سريع للأجزاء الصغيرة.
  • \n
\n\n

2. الطريقة رقم 1: فك الترجمة عبر IntelliJ IDEA (الأكثر موثوقية)

\n\n

إذا كان لديك ملف .kt الأصلي، يمكنك فتحه في IntelliJ IDEA (أو Android Studio) وتطلب من IDE عرض كود Java المكافئ. كيف تفعل ذلك؟

\n\n

الخطوة 1. افتح ملف Kotlin

\n

لنفترض أن لدينا فئة بسيطة بلغة Kotlin:

\n\n
// File: Person.kt\ndata class Person(val name: String, val age: Int) {\n    fun greet() = "Hello, my name is $name"\n}
\n\n

الخطوة 2. قم بتشغيل فك الترجمة

\n

في قائمة IntelliJ، اختر Tools → Kotlin → Show Kotlin Bytecode. ستفتح لوحة بالبايت كود. في هذه اللوحة، اضغط على زر Decompile - وسترى نسخة Java من ملفك.

\n\n

إليك ما سيعرضه IDE لملف Person.kt الخاص بنا:

\n\n
// Java-декомпиляция\npublic final class Person {\n   @NotNull\n   private final String name;\n   private final int age;\n\n   @NotNull\n   public final String getName() {\n      return this.name;\n   }\n\n   public final int getAge() {\n      return this.age;\n   }\n\n   public Person(@NotNull String name, int age) {\n      Intrinsics.checkNotNullParameter(name, "name");\n      super();\n      this.name = name;\n      this.age = age;\n   }\n\n   @NotNull\n   public final String greet() {\n      return "Hello, my name is " + this.name;\n   }\n\n   // equals(), hashCode(), toString() — تم إنشاؤها تلقائيًا\n}
\n\n

هام: يحتوي الكود على استدعاءات Intrinsics - وهي جزء من بيئة تشغيل Kotlin. إذا قمت بنسخ هذا الكود في مشروع بدون تبعيات Kotlin، فلن يتم تجميعه. سيتعين عليك إما إضافة kotlin-stdlib أو إزالة هذه التحققات يدويًا.

\n\n

3. الطريقة رقم 2: JADX - لنظام Android بدون كود مصدري

\n\n

إذا كان لديك فقط ملف APK، وتريد فهم كيفية تنفيذ فئة Kotlin معينة، استخدم JADX. إنه مفكك ترجمة يحول بايت كود DEX إلى كود Java قابل للقراءة. يتم تجميع فئات Kotlin في APK على أي حال إلى بايت كود JVM، لذا سيتعامل JADX معها.

\n\n

مثال: وجدت في APK فئة تحتوي على coroutine. في Kotlin قد يبدو هذا كـ

المدونات

توصيات الكتب