companion object: สมาชิกคล้าย Static ใน Kotlin
เพิ่ม companion object ให้คลาสเพื่อจำลองเมธอดและค่าคงที่แบบ static
companion object: สมาชิกคล้าย Static ใน Kotlin เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ไม่มี static แต่มี companion object
Kotlin ไม่มีคำสำคัญ static แต่มี companion object ที่ประกาศภายในคลาสเพื่อจัดเตรียมสมาชิกระดับคลาสในลักษณะคล้าย static
การประกาศ companion object
ใส่ companion object ไว้ภายในคลาส สมาชิกของมันสามารถเรียกใช้ได้ด้วย ClassName.member
class MathUtils {
companion object {
fun square(x: Int) = x * x
}
}
fun main() {
println(MathUtils.square(5)) // 25
}ค่าคงที่ใน companion object
โดยทั่วไปค่าคงที่จะอยู่ใน companion object และมักใช้ const val สำหรับค่าตามตัวอักษรที่คอมไพล์ได้ตั้งแต่เวลาคอมไพล์
class HttpClient {
companion object {
const val DEFAULT_TIMEOUT = 5000
const val USER_AGENT = "MyApp/1.0"
}
}
fun main() {
println(HttpClient.DEFAULT_TIMEOUT)
println(HttpClient.USER_AGENT)
}companion object ที่มีชื่อ
คุณสามารถตั้งชื่อให้ companion object ได้ ทั้ง ClassName.member และ ClassName.CompanionName.member สามารถใช้งานได้
class Database {
companion object Factory {
fun create() = Database()
}
}
fun main() {
val db1 = Database.create() // works
val db2 = Database.Factory.create() // also works
println("$db1 / $db2")
}รูปแบบเมธอดโรงงาน
ใช้ออบเจ็กต์คู่หูเพื่อสร้างอินสแตนซ์พร้อมการตรวจสอบความถูกต้องหรือรูปแบบการสร้างทางเลือก
class User private constructor(val name: String, val email: String) {
companion object {
fun create(name: String, email: String): User {
require(email.contains("@")) { "invalid email" }
return User(name, email)
}
}
}
fun main() {
val u = User.create("Ada", "ada@example.com")
println("${u.name} <${u.email}>")
}การใช้งานอินเทอร์เฟซ
ออบเจ็กต์คู่หูเองสามารถใช้งานอินเทอร์เฟซได้ ซึ่งมีประโยชน์เมื่อต้องใช้ร่วมกับคลาสที่ต้องการสัญญาซึ่งทำงานเสมือนสมาชิกสแตติก
interface Loadable<T> { fun load(): T }
class Config(val data: String) {
companion object : Loadable<Config> {
override fun load() = Config("loaded data")
}
}
fun main() {
println(Config.load().data)
}@JvmStatic สำหรับการทำงานร่วมกับ Java
ใส่คำอธิบายประกอบ @JvmStatic ให้สมาชิกของออบเจ็กต์คู่หู เพื่อเปิดให้ผู้เรียกจาก Java เห็นสมาชิกเหล่านั้นเป็นเมธอดสแตติกจริง
class Util {
companion object {
@JvmStatic
fun greet(name: String) = "Hello, $name!"
}
}
fun main() {
println(Util.greet("Kotlin"))
// In Java: Util.greet("Java")
}การเข้าถึงออบเจ็กต์คู่หูโดยตรง
ClassName.Companion อ้างถึงออบเจ็กต์คู่หูโดยตรง ใช้เมื่อส่งออบเจ็กต์นี้เป็นอาร์กิวเมนต์
class Counter {
companion object {
fun greet() = "hi from companion"
}
}
fun main() {
val ref = Counter.Companion
println(ref.greet())
}ออบเจ็กต์คู่หูกับระดับบนสุด
สำหรับฟังก์ชันอรรถประโยชน์ที่ไม่ได้เป็นส่วนหนึ่งของคลาส ควรใช้ฟังก์ชันระดับบนสุดแทนคลาสที่มีเพียงออบเจ็กต์คู่หู
// File-level — usually cleaner:
fun greet(name: String) = "Hi, $name!"
// Versus:
class Greeter { companion object { fun greet(n: String) = "Hi, $n!" } }
fun main() {
println(greet("Ada"))
println(Greeter.greet("Ada"))
}ออบเจ็กต์คู่หูหนึ่งรายการต่อคลาส
คลาสหนึ่งมีออบเจ็กต์คู่หูได้ไม่เกินหนึ่งรายการ หากจำเป็น ออบเจ็กต์ปกติภายในสามารถเก็บสถานะที่ใช้ร่วมกันเพิ่มเติมได้
class Service {
companion object {
val version = "1.0"
}
object InternalHelper { fun log() = println("internal") }
}
fun main() {
println(Service.version)
Service.InternalHelper.log()
}ฟังก์ชันส่วนขยายของออบเจ็กต์คู่หู
คุณสามารถขยายออบเจ็กต์คู่หูจากภายนอกคลาส เพื่อเพิ่มตัวช่วยที่ทำงานเลียนแบบสแตติกได้
class Lib {
companion object
}
fun Lib.Companion.helper() = "added later"
fun main() {
println(Lib.helper())
}ตรวจสอบอย่างรวดเร็ว
สิ่งใดใน Kotlin ที่เทียบเท่ากับสมาชิก static ของ Java
สรุปทบทวน
Kotlin ไม่มี static ให้ใช้ออบเจ็กต์คู่หูสำหรับสมาชิกระดับคลาส เช่น ค่าคงที่ ตัวสร้าง และการใช้งานอินเทอร์เฟซ ใส่คำอธิบายประกอบ @JvmStatic เพื่อทำงานร่วมกับ Java หรือขยายด้วยฟังก์ชันส่วนขยายเพื่อสร้างตัวช่วยที่ทำงานเลียนแบบสแตติก
คำถามที่พบบ่อย
บทเรียน “companion object: สมาชิกคล้าย Static ใน Kotlin” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “companion object: สมาชิกคล้าย Static ใน Kotlin” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “companion object: สมาชิกคล้าย Static ใน Kotlin”
เพิ่ม companion object ให้คลาสเพื่อจำลองเมธอดและค่าคงที่แบบ static คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “companion object: สมาชิกคล้าย Static ใน Kotlin” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การประกาศ object: Singleton ของ Kotlin
- companion object: สมาชิกคล้าย Static ใน Kotlin
- ออบเจ็กต์นิรนามและนิพจน์ออบเจ็กต์
- เมธอด Factory ด้วย companion object