การเรียกรหัส kotlin จาก Java Code
บทนำ
สิ่งที่ดีที่สุดเกี่ยวกับKotlinคือการออกแบบโดยคำนึงถึงความสามารถในการทำงานร่วมกันของ Java หมายความว่าโค้ด Java ที่มีอยู่ สามารถเรียกได้จากKotlinและยังสามารถเรียกโค้ด Kotlin จาก Javaได้อีกด้วย รองรับทั้งสองวิธี
สามารถเรียกใช้โค้ด Kotlin จาก Java ได้อย่างง่ายดาย ตัวอย่างเช่น อินสแตนซ์ของคลาส Kotlin สามารถสร้างและดำเนินการได้อย่างราบรื่นในเมธอดของ Java แต่มีความแตกต่างมากมายที่ต้องให้ความสนใจเมื่อเรียก โค้ด kotlinภายในจาวา
ใน Android หากคุณใช้kotlinคุณยังสามารถเข้าถึง API ทั้งหมดที่สร้างด้วยJavaได้โดยไม่มีปัญหา
คุณจะเรียก Kotlin Code จาก Java ได้อย่างไร
โค้ด Kotlin คอมไพล์เป็นองค์ประกอบ JVMดังนั้นจึงเข้าถึงได้ง่ายจากโค้ดจาวา
แต่คุณสามารถเพิ่มคำอธิบายประกอบลงในโค้ด kotlin ของคุณเพื่อให้ง่ายต่อการเปิดเผยจากโค้ดจาวา
คำอธิบายประกอบเป็นวิธีการแนบข้อมูลเมตากับโค้ด
เริ่มกันเลย เปิด Intellij Idea สร้างโครงการ Kotlin ใหม่ เลือกgradleสำหรับโครงการ
หากคุณต้องการเพิ่ม รูท ซอร์สของจาวา ให้ คลิกขวาที่ ไดเร็กทอรี หลักและ เพิ่ม ไดเร็กทอรี ใหม่ เพิ่มจาวา
และตอนนี้มาเริ่มเรียนรู้เกี่ยวกับคำอธิบายประกอบที่ทำให้เข้าถึงโค้ด kotlin จาก java ได้ง่าย
@JvmStatic
สิ่งนี้ใช้เพื่ออธิบายฟิลด์และฟังก์ชันคงที่ของ kotlin เพื่อให้คุณสามารถเข้าถึงได้จากโค้ดจาวาโดยไม่จำเป็นต้องเพิ่ม คำหลัก INSTANCEหลังจากชื่อคลาส
public object User{
@JvmStatic //use this
public fun getUserName():String="Kururu"
}
public class JavaCode {
public static void main(String[] args) {
System.out.println(User.getUserName()); // without INSTANCE KEYWORD
// System.out.println(new Employee()
// .getEmployeeName());
}
}
public object User{
@JvmStatic
var name:String ="Kururu"
}
@JvmField
สิ่งนี้ใช้เพื่อเข้าถึงฟิลด์อินสแตนซ์ในคลาสปกติ เราใช้วัตถุในตัวอย่างก่อนหน้า
แต่คุณอาจคิดถึงวิธีการเข้าถึงฟิลด์ในคลาส Kotlin ปกติ
คำตอบคือการใช้คำอธิบายประกอบ @JvmField
ก่อนจะข้ามไปที่โค้ด เรามาอธิบายวิธีการคอมไพล์ฟิลด์หรือคุณสมบัติ kotlin กัน
คุณสมบัติ Kotlin ถูกคอมไพล์เป็นองค์ประกอบ Java ต่อไปนี้:
- เมธอด getter โดยมีชื่อที่คำนวณโดยการเติม
getคำนำหน้า - เมธอด setter โดยมีชื่อที่คำนวณโดย
setนำหน้าคำนำหน้า (เฉพาะvarคุณสมบัติ)
var firstName: String
บรรทัดนี้รวบรวมต่อไปนี้:
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
new ClassName().getFirstName();
ขอให้สังเกตว่าเราได้ใช้@JvmFieldover field nameเพื่อสั่งให้ Kotlin compiler ไม่สร้าง getter และ setter สำหรับสิ่งเดียวกันและเปิดเผยเป็นฟิลด์
class Employee{
@JvmField //from java code you can access firstName
var firstName:String="Kururu"
}
public static void main(String[] args) {
System.out.println(new Employee().firstName
);
}
คำอธิบายประกอบนี้บอกให้ JVM เชื่อมโยงชื่อเฉพาะกับฟังก์ชันของคุณ ซึ่งจะแทนที่ชื่อฟังก์ชันของโค้ด kotlin
คอตลิน :
@JvmName("getEmployeeName")
fun getEmpName():String{
return "Abdo";
}
public class JavaCode {
public static void main(String[] args) {
// System.out.println(User.getMyUserName());
System.out.println(new Employee().getEmployeeName()
);
}
}
โดยปกติ หากคุณเขียนฟังก์ชัน Kotlin ด้วยค่าพารามิเตอร์เริ่มต้น จะมองเห็นได้ใน Java เป็นลายเซ็นแบบเต็มเท่านั้น โดยมีพารามิเตอร์ทั้งหมดแสดงอยู่ หากคุณต้องการเปิดเผยการโอเวอร์โหลดหลายครั้งแก่ผู้เรียก Java คุณสามารถใช้คำอธิบายประกอบได้@JvmOverloads
คำอธิบายประกอบยังใช้ได้กับตัวสร้าง วิธีแบบสแตติก และอื่นๆ ไม่สามารถใช้กับวิธีการแบบนามธรรม รวมถึงวิธีการที่กำหนดไว้ในส่วนต่อประสาน
ดังนั้นคำอธิบายประกอบนี้ใช้เพื่อระบุพารามิเตอร์เริ่มต้นจึงสามารถข้ามจากโค้ดจาวา โดยไม่ต้องผ่านพารามิเตอร์ทั้งหมด
สิ่งนี้ใช้ได้กับตัวสร้างคลาส
คอตลิน:
@JvmOverloads fun getEmpName( name:String="abdo"):String{
return "Abdo";
}
public static void main(String[] args) {
// System.out.println(User.getMyUserName());
//access getEmpName() without need to pass NAME argument
System.out.println(new Employee().getEmployeeName()
);
}
หัวข้อนี้ได้รับแรงบันดาลใจจากบล็อกของเขา
ตรวจสอบบล็อกของเขา:https://amitshekhar.me
ข้อมูลอ้างอิง:
https://kotlinlang.org/docs/java-to-kotlin-interop.html
https://amitshekhar.me





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)