Android Studio มีการรองรับ Kotlin อย่างเต็มรูปแบบ ซึ่งช่วยให้คุณเพิ่ม ไฟล์ Kotlin ไปยังโปรเจ็กต์ที่มีอยู่และแปลงไฟล์ภาษา Java เป็น Kotlin จากนั้นคุณจะใช้เครื่องมือที่มีอยู่ทั้งหมดของ Android Studio กับโค้ด Kotlin ได้ ซึ่งรวมถึงการเติมข้อความอัตโนมัติ การตรวจสอบ Lint การเปลี่ยนโครงสร้างภายในโค้ด การแก้ไขข้อบกพร่อง และอีกมากมาย
หากคุณเริ่มโปรเจ็กต์ใหม่และต้องการใช้ Kotlin โปรดดู สร้างโปรเจ็กต์
ดูตัวอย่างได้ที่ ตัวอย่างโค้ด Kotlin
เพิ่ม Kotlin ลงในโปรเจ็กต์ที่มีอยู่
วิธีเพิ่ม Kotlin ลงในโปรเจ็กต์ของคุณมีดังนี้
คลิกไฟล์ > ใหม่ แล้วเลือกเทมเพลต Android แบบต่างๆ เช่น เป็นส่วนย่อยที่ว่างเปล่าใหม่ ดังที่แสดงในรูปที่ 1 หากไม่เห็นรายการ ของเทมเพลตในเมนูนี้ ให้เปิดหน้าต่างโครงการก่อน แล้วเลือก โมดูลแอป
ในวิซาร์ดที่ปรากฏขึ้น ให้เลือก Kotlin สำหรับภาษาต้นฉบับ รูปที่ 2 แสดงกล่องโต้ตอบกิจกรรม Android ใหม่เมื่อคุณต้องการ สร้างกิจกรรมใหม่
ดำเนินการต่อในวิซาร์ด
หรือคลิก ไฟล์ > ใหม่ > ไฟล์/คลาส Kotlin เพื่อสร้าง Kotlin พื้นฐาน หากไม่เห็นตัวเลือกนี้ ให้เปิดหน้าต่างโปรเจ็กต์ และ ให้เลือกไดเรกทอรี java หน้าต่างไฟล์/ชั้นเรียน Kotlin ใหม่ช่วยให้คุณ กำหนดชื่อไฟล์และให้ตัวเลือกที่หลากหลายสำหรับประเภทไฟล์ ได้แก่ File, Class, Interface, Enum Class หรือ Object สิ่งที่คุณเลือก จะกำหนดโครงสร้างพื้นฐานที่สร้างขึ้นสำหรับคุณในไฟล์ Kotlin ใหม่ หากคุณ เลือกชั้นเรียน Android Studio จะสร้างไฟล์ต้นฉบับ Kotlin ใหม่ด้วย ชื่อ และคำจำกัดความของคลาสที่ตรงกัน หากคุณเลือกอินเทอร์เฟซ อินเทอร์เฟซ มีการประกาศในไฟล์ และอื่นๆ
หากเพิ่มคลาสหรือไฟล์ Kotlin ใหม่ไปยัง โปรเจ็กต์โดยตรง (ไม่ใช้เทมเพลต Android) Android Studio จะแสดง คำเตือนว่าไม่มีการกำหนดค่า Kotlin ในโปรเจ็กต์ดังที่แสดงในรูปที่ 3 กําหนดค่า Kotlin โดยคลิกกําหนดค่าที่มุมขวาบนของ เครื่องมือแก้ไขหรือในการแจ้งเตือนบันทึกเหตุการณ์ที่ปรากฏขึ้นที่มุมขวาล่าง
เลือกตัวเลือกเพื่อกำหนดค่า Kotlin สำหรับโมดูลทั้งหมดที่มี Kotlin เมื่อได้รับข้อความแจ้ง ดังที่แสดงในรูปที่ 4
เมื่อคุณคลิกตกลง Android Studio จะเพิ่ม Kotlin ลงในโปรเจ็กต์ Classpath และ
ใช้ปลั๊กอิน Kotlin Android กับแต่ละโมดูลที่มีไฟล์ Kotlin
ไฟล์ build.gradle
ของคุณควรมีลักษณะคล้ายกับตัวอย่างด้านล่าง
ดึงดูด
// Project build.gradle file. buildscript { ext.kotlin_version = '1.4.10' ... dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
Kotlin
// Project build.gradle.kts file. buildscript { extra["kotlin_version"] = "1.4.10" ... dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") } }
ดึงดูด
// Inside each module using kotlin plugins { ... id 'kotlin-android' } ... dependencies { implementation 'androidx.core:core-ktx:1.3.2' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" }
Kotlin
// Inside each module using kotlin plugins { ... kotlin("android") } ... val kotlin_version: String by rootProject.extra dependencies { implementation("androidx.core:core-ktx:1.3.2") implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version") }
องค์กรต้นทาง
โดยค่าเริ่มต้น ระบบจะบันทึกไฟล์ Kotlin ใหม่ใน src/main/java/
ซึ่งช่วยให้ง่ายขึ้น
เพื่อดูทั้งไฟล์ Kotlin และ Java ในที่เดียว หากคุณต้องการแยก
ไฟล์ Kotlin จากไฟล์ Java คุณสามารถวางไฟล์ Kotlin ไว้ในส่วน
src/main/kotlin/
แทน หากคุณทำเช่นนี้ คุณต้องใส่
ไดเรกทอรีใน sourceSets
ของคุณ
การกำหนดค่า ตามที่แสดงด้านล่าง
ดึงดูด
android { sourceSets { main.java.srcDirs += 'src/main/kotlin' } }
Kotlin
android { sourceSets { getByName("main") { java.srcDir("src/main/kotlin") } } }
แปลงโค้ด Java ที่มีอยู่เป็นโค้ด Kotlin
ในการแปลงโค้ด Java เป็น Kotlin ให้เปิดไฟล์ Java ใน Android Studio แล้วเลือก รหัส > แปลงไฟล์ Java เป็นไฟล์ Kotlin หรือสร้าง Kotlin ใหม่ (File > New > Kotlin File/Class) แล้ววางโค้ด Java ลงใน ไฟล์นั้น จากนั้น Android Studio จะแสดงข้อความแจ้งและข้อเสนอให้แปลงโค้ดของคุณ กับ Kotlin ดังที่แสดงในรูปที่ 5 คลิกใช่เพื่อแปลง คุณสามารถเลือก ให้เลือกอย่าแสดงกล่องโต้ตอบนี้ในครั้งถัดไป ซึ่งจะทําให้เกิด Conversion ในอนาคต อัตโนมัติ
การแปลงโค้ดและความสามารถในการเว้นว่าง
กระบวนการแปลงของ Android Studio สร้างโค้ด Kotlin ที่มีฟังก์ชันการทำงานเทียบเท่ากับฟังก์ชันต่างๆ ที่คอมไพล์และเรียกใช้ อย่างไรก็ตาม คุณอาจต้องเพิ่มวิธีการชำระเงินเพิ่มเติม การเพิ่มประสิทธิภาพไปยังโค้ดที่แปลงแล้ว เช่น คุณอาจต้องการปรับแต่งวิธี โค้ดที่แปลงแล้วจะจัดการประเภทที่ไม่มีข้อมูล
ใน Android เป็นเรื่องปกติที่จะชะลอการเริ่มต้นของออบเจ็กต์ View
และออบเจ็กต์อื่นๆ
จนกว่าส่วนย่อยหรือกิจกรรมที่จะแนบไว้ไปถึง
สถานะที่เหมาะสมของวงจร ตัวอย่างเช่น คุณอาจมีการอ้างอิงถึง
ในส่วนย่อยของคุณ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
public class JavaFragment extends Fragment {
// Null until onCreateView.
private Button button;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_content, container,false);
// Get a reference to the button in the view, only after the root view is inflated.
button = root.findViewById(R.id.button);
return root;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Not null at this point of time when onViewCreated runs
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
});
}
}
แม้ว่าตัวแปรของปุ่มจะเป็นค่าว่าง แต่สำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมด
ไม่ควรเป็นค่าว่างเมื่อใช้ในตัวอย่างนี้ แต่เนื่องจากค่าของเมตริกไม่ใช่
กำหนดไว้ ณ เวลาที่สร้าง โค้ด Kotlin ที่สร้างขึ้นจะถือว่า Button
เป็นประเภท Null และใช้โอเปอเรเตอร์การยืนยันที่ไม่เป็นค่าว่างเพื่อแยกปุ่ม
เมื่อเพิ่ม Listener การคลิก ดังที่แสดงด้านล่าง
class JavaFragment : Fragment() {
// Null until onCreateView.
private var button: Button? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
...
// Get a reference to the button in the view, only after the root view is inflated.
button = root.findViewById(R.id.button)
...
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Not null at the point of time when onViewCreated fires
// but force unwrapped nonetheless
button!!.setOnClickListener { }
}
}
Conversion นี้เหมาะสมน้อยกว่าการใช้ lateinit
สำหรับกรณีนี้เนื่องจากคุณ
ถูกบังคับให้แยกการอ้างอิงปุ่มด้วยการยืนยันที่ไม่เป็นค่าว่างหรือ Safe-Call
ในทุกที่ที่มีการเข้าถึง
ในกรณีอื่นๆ ซึ่ง null
คือการกำหนดตัวแปรที่ถูกต้องตาม
Use Case ของแอปพลิเคชัน โดยใช้โอเปอเรเตอร์ Safe-Call (?.) ที่มีการสิ้นสุดของ Elvis
โอเปอเรเตอร์ (?:) อาจเป็นวิธีที่เหมาะสมกว่าในการแกะ
ออบเจ็กต์ที่ไม่มีข้อมูลหรือบังคับให้เป็นค่าเริ่มต้นที่เหมาะสมที่ไม่เป็นค่าว่าง Android Studio
มีข้อมูลไม่เพียงพอที่จะพิจารณาในระหว่าง
Conversion แม้ว่าจะมีค่าเริ่มต้นเป็นการยืนยันสิทธิ์ที่ไม่เป็นค่าว่าง แต่คุณควร
ติดตามและปรับเปลี่ยนโค้ดที่แปลงแล้วตามที่จำเป็น
ข้อมูลเพิ่มเติม
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ทั้งโค้ด Kotlin และ Java ในโปรเจ็กต์ของคุณ โปรดดู การเรียกใช้โค้ด Java จาก Kotlin
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Kotlin ในสถานการณ์ขององค์กรได้ที่ การใช้ Kotlin สำหรับทีมขนาดใหญ่
สำหรับข้อมูลเกี่ยวกับ Wrapper ของ Kotlin ที่มีลักษณะเฉพาะสำหรับ Android API ที่มีอยู่ โปรดดู Android KTX