सभी गैर Mutable____
Kotlin में संग्रह संकलन समय केवल पढ़ने के प्रकार डिफ़ॉल्ट रूप से, लेकिन नहीं अपरिवर्तनीय हैं। निम्नलिखित कोड का टुकड़ा देखें:
fun main(args: Array<String>) {
// Explanation for ArrayList(listOf()) later down the post
val list: List<Int> = ArrayList(listOf(1, 2, 3))
println(list) // [1, 2, 3]
// Fails at compile time
// list.add(4)
// Uh oh! This works at runtime!
(list as MutableList<Int>).add(4)
println(list) // [1, 2, 3, 4]
}
वास्तव में एक अपरिवर्तनीय सूची करवाने के लिए, अमरूद के Immutable____
संग्रह पर विचार करें:
import com.google.common.collect.ImmutableList
fun main(args: Array<String>) {
val list: List<Int> = ImmutableList.of(1, 2, 3)
println(list) // [1, 2, 3]
// Fails at compile time
// list.add(4)
// Fails at runtime, as expected
(list as MutableList<Int>).add(4)
println(list) // [1, 2, 3, 4]
}
ध्यान रखें कि Kotlin के मानक क्रम समारोह के कुछ संग्रह है कि या तो unmodifiable हैं वापस आ सकते हैं, नहीं आकार बदलने योग्य, इत्यादि, इसलिए जब आप सीधे एक म्यूटेबल में केवल पढ़ने के लिए संग्रह डालते हैं तो सभी शर्त बंद हो जाती हैं।
उदाहरण के लिए, listOf()
वर्तमान में (भविष्य में इसके लिए हो सकता है!) की ओर से एक java.util.Arrays.ArrayList
vararg मापदंडों के सरणी के आसपास Arrays.asList(T...)
के माध्यम से। यह "सूची" संशोधित की जा सकती है, लेकिन तत्वों को कभी भी जोड़ा या हटाया नहीं जा सकता है, क्योंकि आप किसी सरणी का आकार बदल नहीं सकते हैं। अधिक जानकारी के लिए Arrays.asList(T...)
javadoc देखें।
यदि आप वास्तव में किसी दिए गए संग्रह से एक उत्परिवर्तनीय संग्रह चाहते हैं, तो .toMutableList()
का उपयोग करके प्रतिलिपि बनाने पर विचार करें। यह किसी भी संग्रह पर काम करेंगे:
import com.google.common.collect.ImmutableList
fun main(args: Array<String>) {
val list: List<Int> = ImmutableList.of(1, 2, 3)
val copy = list.toMutableList()
copy.add(4)
println(copy) // [1, 2, 3, 4]
println(list) // [1, 2, 3]
}
मैं Kotlin से परिचित नहीं हूँ, लेकिन अमरूद जावा पुस्तकालय है जो आप रैप करने के लिए परिवर्तनशील 'ArrayList' इस्तेमाल कर सकते हैं एक' ImmutableList' प्रकार है। – pathfinderelite
unmodifiableList (ArrayList()) –
काम करता है। कृपया इसे उत्तर के रूप में पोस्ट करें। – WindRider