คำถามติดแท็ก kotlin

Kotlin เป็นภาษาการเขียนโปรแกรมแบบโอเพนซอร์ซที่ได้รับการสนับสนุนจาก JetBrains Kotlin ผสมผสานคุณสมบัติ OOP และคุณสมบัติการใช้งานและมุ่งเน้นไปที่การทำงานร่วมกันความปลอดภัยความคมชัดและการรองรับเครื่องมือ ปัจจุบันกำหนดเป้าหมายไปที่ JVM และ JavaScript และเป็นภาษาที่ได้รับการสนับสนุนอย่างเป็นทางการบน Android

1
การขยายคลาสทั่วไปและใช้อินเทอร์เฟซใน Kotlin
สมมติว่าฉันต้องการตัวแปรประเภท T ที่ขยายคลาสบางคลาสและใช้อินเทอร์เฟซ สิ่งที่ต้องการ: class Foo <T : Bar implements Baz> { ... } ไวยากรณ์ของสิ่งนี้ใน Kotlin คืออะไร?
90 generics  kotlin 


1
สร้างอินสแตนซ์ของคลาสนามธรรมใน Kotlin
ฉันเพิ่งเริ่มใช้ Kotlin และฉันกำลังพยายามใช้มันในโครงการ Android ของฉัน ฉันมีรหัสนี้: public var oneTouchTimer: CountDownTimer = CountDownTimer(500, 100) { override fun onTick(l: Long) { } override fun onFinish() { } } และมันทำให้เกิดข้อผิดพลาด: Cannot create an instance of an abstract class. โดยทั่วไปฉันกำลังพยายามสร้างอินสแตนซ์ของ CountDownTimer และไม่สามารถหาวิธีแปลงเป็น Kotlin ได้ นี่คือรหัสใน Java: CountDownTimer oneTouchTimer = new CountDownTimer(500, 100) { @Override …
90 kotlin 

6
Getters and Setters ใน Kotlin
ตัวอย่างเช่นใน Java ฉันสามารถเขียน getters ด้วยตัวเอง (สร้างโดย IDE) หรือใช้คำอธิบายประกอบเช่น @Getter ในลอมบอกซึ่งค่อนข้างง่าย Kotlin แต่มีgetters และ setters โดยค่าเริ่มต้น แต่ฉันไม่เข้าใจวิธีใช้ ฉันต้องการทำเช่นนั้น - คล้ายกับ Java: private val isEmpty: String get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility. แล้ว getters ทำงานอย่างไร?

3
Iterable และ Sequence ของ Kotlin มีลักษณะเหมือนกันทุกประการ ทำไมต้องมีสองประเภท?
อินเทอร์เฟซทั้งสองนี้กำหนดวิธีการเดียวเท่านั้น public operator fun iterator(): Iterator<T> เอกสารบอกว่าSequenceตั้งใจจะขี้เกียจ แต่ไม่Iterableขี้เกียจด้วย (เว้นแต่จะได้รับการสนับสนุนจาก a Collection)?

4
Android Studio ยังคงนำเข้าการนำเข้า sun.jvm.hotspot.utilities.IntArray
ทุกครั้งที่ฉันคัดลอกชิ้นส่วนของรหัสในJavaและวางลงในสตูดิโอ Android ของฉันและมันจะแปลงรหัสนี้เป็นรหัสKotlinมันจะนำเข้าโดยอัตโนมัตินี้: import sun.jvm.hotspot.utilities.IntArray Unresolved reference: sunและเวลาที่หุ่นยนต์สตูดิโอทำให้การนำเข้านี้ทุกคนก็ให้ข้อผิดพลาด ไม่มีใครรู้วิธีการแก้ไขปัญหานี้หรือไม่ ... มันน่ารำคาญมาก

3
ViewBinding vs Kotlin Android ส่วนขยายพร้อมมุมมองสังเคราะห์
ViewBindingใหม่เปรียบเทียบกับKotlin Android Extensionsกับการโยงมุมมองสังเคราะห์อย่างไร นอกเหนือจากรูปแบบ NullSafety และ TypeSafety ที่ได้รับจาก ViewBindings ใหม่ทำไมเราจึงควรพิจารณาวิธี Kotlin ในการใช้การเชื่อมโยงสังเคราะห์ใน Views ViewBinding ใหม่มีประสิทธิภาพมากกว่าหรือไม่เนื่องจากสร้างคลาส Binding ไว้ก่อนมือ?

2
วิธีการ "เรียกวิธีการบล็อกที่ไม่เหมาะสม" เหมาะสมหรือไม่
ขณะนี้ฉันกำลังพยายามใช้ kotlin coroutines เพิ่มเติม แต่ฉันประสบปัญหา: เมื่อใช้ moshi หรือ okhttp ภายใน coroutines เหล่านี้ฉันได้รับคำเตือน: "เรียกวิธีการบล็อกที่ไม่เหมาะสม" วิธีที่ดีที่สุดในการแก้ไขปัญหาเหล่านี้คืออะไร ฉันไม่ต้องการที่จะไม่เหมาะสม ;-)

3
Kotlin Flow กับ Android LiveData
ฉันมีคำถามบางอย่างเกี่ยวกับ Kotlin Flow ฉันสามารถสังเกต LiveData ได้จากหลายแฟรกเมนต์ ฉันสามารถทำสิ่งนี้กับ Flow ได้หรือไม่ ถ้าใช่แล้วได้อย่างไร เราสามารถมี LiveData หลายรายการจาก LiveData เดียวโดยใช้&map switchMapมีวิธีใดที่จะมีการไหลหลายครั้งจากการไหลของแหล่งเดียว? ใช้MutableLiveDataฉันสามารถปรับปรุงข้อมูลได้จากทุกที่โดยใช้การอ้างอิงตัวแปร มีวิธีใดที่จะทำเช่นเดียวกันกับ Flow ฉันมีกรณีใช้: ฉันจะสังเกตการSharedPreferencesใช้callbackFlow{...}ซึ่งจะให้ฉันไหลที่มาเดียว จาก Flow นั้นฉันต้องการสร้าง Flow หลายรายการสำหรับคู่คีย์ - ค่าแต่ละคู่ คำถามเหล่านี้อาจฟังดูไร้สาระ ฉันใหม่สำหรับ Rx และ Flow โลก

2
การกำหนดค่าเริ่มต้นตัวแปร Kotlin สำหรับคลาสลูกทำงานแปลกสำหรับการเริ่มต้นตัวแปรด้วยค่า 0
ฉันได้สร้างลำดับชั้นของคลาสต่อไปนี้: open class A { init { f() } open fun f() { println("In A f") } } class B : A() { var x: Int = 33 init { println("x: " + x) } override fun f() { x = 1 println("x in f: "+ x) } init { …

2
ไม่สามารถรับรูทวิวจากการผูกข้อมูลหลังจากเปิดใช้งานปลั๊กอิน Safe-args
ฉันกำลังทำงานกับแอพ Android โดยใช้ dataBinding และกำลังพยายามเพิ่มปลั๊กอิน safe-args แต่หลังจากเปิดใช้งานปลั๊กอินแล้วฉันจะไม่สามารถรับมุมมองรูทผ่านทางผูกพันได้อีก - Android Studio ให้ข้อผิดพลาด: Unresolved Reference None of the following candidates is applicable because of a receiver type mismatch: * internal val File.root: File defined in kotlin.io ฉันจะทำให้ databinding และ safe-args เล่นด้วยกันได้อย่างไร โปรดทราบว่าในขณะที่ข้อมูลโค้ดอยู่ใน Kotlin ฉันจะทำตามคำตอบของ Java อย่างมีความสุข ไม่สะดวกใน Java แต่ฉันสามารถอ่านและแปลได้อย่างง่ายดาย ฉันไม่สามารถหาคนอื่นที่มีปัญหาเดียวกันโดย Googling ข้อความแสดงข้อผิดพลาดและ …

1
Navigation Arch Component สร้างการรั่วไหลของหน่วยความจำบวกที่ผิดพลาดหรือไม่
ฉันมีความรู้พื้นฐานเกี่ยวกับการรั่วไหลของหน่วยความจำและสิ่งที่สามารถทำให้พวกเขา นั่นเป็นเหตุผลที่ฉันไม่เข้าใจถ้าฉันมีปัญหาในรหัสของฉันหรือมันเป็นบวกที่ผิดพลาด ฉันไม่ทราบว่าฉันควรแบ่งปันรหัสส่วนใดเนื่องจากโครงการไม่เล็ก แต่เพียงแค่แจ้งให้เราทราบในความคิดเห็นและฉันจะเพิ่มรหัสที่จำเป็น ฉันใช้คอมโพเนนต์ arch navigation และทำตามรูปแบบ MVVM ฉันเพิ่มห้องสมุด LeakCanary ในภายหลังในการพัฒนาโครงการและมันก็เริ่มให้คำเตือนเกี่ยวกับอินสแตนซ์ที่เก็บไว้ทันทีเมื่อฉันนำทางระหว่างหน้าจอ ปัญหาเกิดขึ้นเมื่อฉันเพิ่มแฟรกเมนต์ลงในสแต็กหลัง เมื่อเพิ่มแฟรกเมนต์ที่เพิ่มลงในสแต็กหลังแต่ละตัวนับอินสแตนซ์ที่เก็บไว้จะเพิ่มขึ้น เมื่อถึงค่าขีด จำกัด 5 LeakCanary จะทิ้งฮีปและจัดทำรายงาน แต่ถ้าฉันคลิกที่ปุ่มย้อนกลับและกลับสู่หน้าจอก่อนหน้าตัวนับอินสแตนซ์ที่เก็บไว้จะลดลงและในที่สุดเมื่อกลับสู่หน้าจอที่ 1 อินสแตนซ์ที่เก็บไว้ทั้งหมดจะหายไป ถ้าฉันดูรายงานการวิเคราะห์ฮีปมันบอกว่าตัวแปร CoordinatorLayout ซึ่งเป็นการอ้างอิงถึงCoordinatorLayoutin in xml ได้รั่วไหลออกมา หากฉันลบตัวแปรและการใช้งานทั้งหมดแล้วเรียกใช้แอปอีกครั้งฉันเห็นปัญหาเดียวกัน แต่ตอนนี้มีตัวแปรอื่นที่อ้างอิงถึงมุมมองอื่นใน xml ฉันพยายามลบมุมมองทั้งหมดและการใช้งานที่ LeakCanary รายงานว่าเป็นการรั่วไหล เมื่อมันบอกว่า a TextViewซึ่งเพิ่งใช้ในการตั้งค่าข้อความonViewCreatedและไม่ได้ใช้ที่อื่นถูกรั่วฉันเริ่มสงสัยว่ามีปัญหาในรหัสของฉัน ผมวิเคราะห์วิธีวงจรสายในชิ้นส่วนและพบว่าเมื่อฉันนำทางไปยังหน้าจอใหม่สำหรับส่วนที่ก่อนหน้านี้จนถึงวิธีการทั้งหมดและรวมถึงการonDestroyViewได้รับการเรียก onDestroyแต่ไม่ เมื่อฉันคลิกย้อนกลับonDestroyถูกเรียกสำหรับแฟรกเมนต์ที่อยู่ด้านบนของสแต็กหลังและตัวนับอินสแตนซ์ที่เก็บไว้จะลดลง ฉันสงสัยว่าองค์ประกอบการนำทางจะรักษาอินสแตนซ์ของชิ้นส่วนเมื่อมันอยู่ในกองหลังและ LeakCanary เห็นว่าเป็นรอยรั่ว

2
การเรียกเมธอดแบบเรียกซ้ำทำให้เกิด StackOverFlowError ใน kotlin แต่ไม่ใช่ใน java
ฉันมีสองรหัสที่เหมือนกันเกือบทั้งใน java และ kotlin Java: public void reverseString(char[] s) { helper(s, 0, s.length - 1); } public void helper(char[] s, int left, int right) { if (left >= right) return; char tmp = s[left]; s[left++] = s[right]; s[right--] = tmp; helper(s, left, right); } Kotlin: fun reverseString(s: CharArray): Unit { …
14 java  recursion  kotlin 

1
Android Q: ฐานข้อมูล SQLite ในที่จัดเก็บข้อมูลที่กำหนดขอบเขต
ใน Android Q แนะนำคุณสมบัติการจัดเก็บ Scopedใหม่ซึ่งกล่าวว่า: แอปที่กำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) และสูงกว่าจะได้รับการกำหนดขอบเขตการเข้าถึงที่จัดเก็บข้อมูลภายนอกหรือที่เก็บข้อมูลที่กำหนดขอบเขตโดยค่าเริ่มต้น แอพดังกล่าวมีการเข้าถึงเฉพาะไดเรกทอรีเฉพาะแอปบนที่จัดเก็บข้อมูลภายนอกรวมถึงสื่อประเภทเฉพาะที่แอปสร้างขึ้น ฉันมีแอพของฉันที่สร้างฐานข้อมูล SQLite บนที่จัดเก็บข้อมูลภายนอกเช่นเมื่อแอปถอนการติดตั้งฐานข้อมูลยังมีชีวิตอยู่และสามารถใช้ในภายหลังเป็นการกู้คืนหรือใช้นอกอุปกรณ์ Android (สมมติว่าในพีซี) ฉันจะบรรลุผลเช่นเดียวกันกับ Android Q ได้อย่างไร แม่นยำยิ่งขึ้นถ้าฐานข้อมูลที่จัดเก็บในไดเรกทอรีสาธารณะภายนอกฉันจะอ่านฐานข้อมูลนี้โดยใช้มาตรฐานได้SQLiteOpenHelperอย่างไร

1
เราจะอ้างอิงค่าคงที่ Kotlin ในการประกาศหมายเหตุประกอบ Java ได้อย่างไร?
รับบิตของ Kotlin นี้: object OldTownRoad { const val COWBOY_HATS = "from Gucci" const val WRANGLER = "on my booty" } และคลาส Java นี้: public class Scrap { @Named(OldTownRoad.COWBOY_HATS) public void lilNasXrefs() { System.out.println(OldTownRoad.COWBOY_HATS); System.out.println(OldTownRoad.WRANGLER); } } คอมไพเลอร์มีความสุขกับการprintln()โทร มันบ่นเกี่ยวกับการใช้งานCOWBOY_HATSใน@Namedคำอธิบายประกอบโดยบอกว่า "ค่าแอตทริบิวต์ต้องคงที่" ตามที่เห็นในภาพหน้าจอ Android Studio 3.5.3 นี้: ฉันพยายาม@JvmStaticและประกาศ@JvmFieldเหล่านั้นconst valแต่คอมไพเลอร์บ่นว่าไม่ถูกต้องสำหรับconstคุณสมบัติ ฉันได้รับผลลัพธ์เดียวกันจากcompanion object: class OldTownRoad …
13 kotlin 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.