Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Kotlin में Java के static मेथड्स के समकक्ष क्या है?

परिचय

Java में `static` कीवर्ड क्लास-लेवल मेंबर्स (वेरिएबल्स/मेथड्स) के लिए उपयोग किया जाता है जो इंस्टेंस के बिना एक्सेसिबल होते हैं। Kotlin में `static` कीवर्ड नहीं है, लेकिन समान कार्यक्षमता के लिए दो मुख्य दृष्टिकोण प्रदान करता है।

दृष्टिकोण 1: Companion Object (अनुशंसित)

Kotlin में `companion object` क्लास से जुड़ा एक सिंगलटन ऑब्जेक्ट बनाता है, जो static मेंबर्स के बराबर कार्यक्षमता प्रदान करता है।

उदाहरण:

class MyClass {
    companion object {
        // "Static" वेरिएबल (val = अपरिवर्तनीय)
        const val STATIC_FIELD = "यह एक स्थिर वेरिएबल है"
        
        // "Static" मेथड
        fun getStaticFunction(): String {
            return "यह एक स्थिर मेथड है"
        }
        
        // परिवर्तनीय "static" वेरिएबल
        var counter = 0
            private set
        
        fun incrementCounter() {
            counter++
        }
    }
    
    // इंस्टेंस मेथड companion के प्राइवेट मेंबर्स एक्सेस कर सकता है
    fun printCounter() {
        println("काउंटर: ${counter}")
    }
}

fun main() {
    // इंस्टेंस बनाए बिना एक्सेस
    println(MyClass.STATIC_FIELD)
    println(MyClass.getStaticFunction())
    
    MyClass.incrementCounter()
    MyClass.incrementCounter()
    println("काउंटर: ${MyClass.counter}")  // 2
    
    // नोट: const val को पुनः असाइन नहीं किया जा सकता
    // MyClass.STATIC_FIELD = "नया" // कंपाइल त्रुटि
    
    // लेकिन var बदला जा सकता है
    MyClass.counter = 10  // अगर setter public हो
}

आउटपुट

यह एक स्थिर वेरिएबल है
यह एक स्थिर मेथड है
काउंटर: 2

दृष्टिकोण 2: Object Declaration + @JvmStatic

जब Java इंटरऑपरेबिलिटी के लिए वास्तविक static मेंबर्स की आवश्यकता हो।

उदाहरण:

object MyStaticUtils {
    @JvmStatic
    val STATIC_FIELD = "यह एक स्थिर वेरिएबल है"
    
    @JvmStatic
    fun getStaticFunction(): String = "यह एक स्थिर मेथड है"
    
    @JvmStatic
    fun computeValue(input: Int): Int = input * 2
}

// Java से कॉल करने पर: MyStaticUtils.STATIC_FIELD, MyStaticUtils.getStaticFunction()

fun main() {
    println(MyStaticUtils.STATIC_FIELD)
    println(MyStaticUtils.getStaticFunction())
    println("गणना: ${MyStaticUtils.computeValue(5)}")
}

आउटपुट

यह एक स्थिर वेरिएबल है
यह एक स्थिर मेथड है
गणना: 10

तुलना: Companion Object बनाम @JvmStatic

पहलूCompanion Object@JvmStatic पर Object
Kotlin से एक्सेस`MyClass.field``MyObject.field`
Java से एक्सेस`MyClass.Companion.getField()` या `@JvmField` के साथ`MyObject.field` (वास्तविक static)
क्लास प्राइवेट मेंबर्स एक्सेसहाँनहीं
इंटरफेस में उपयोगनहींहाँ (इंटरफेस में companion object नहीं हो सकता)
विरासतनहींनहीं

उन्नत: @JvmField के साथ Companion Object (Java के लिए वास्तविक static फील्ड)

class JavaInterop {
    companion object {
        @JvmField
        val STATIC_FIELD = "Java से सीधे एक्सेसिबल"
        
        @JvmStatic
        fun staticMethod() = "Java Static Method"
    }
}

// Java कोड:
// String s = JavaInterop.STATIC_FIELD;  // सीधे एक्सेस
// JavaInterop.staticMethod();

कॉन्स्टेंट्स के लिए सर्वोत्तम अभ्यास

// शीर्ष-स्तर (सबसे सरल, कोई क्लास आवश्यक नहीं)
const val API_KEY = "abc123"
const val MAX_SIZE = 100

// या object में (नेमस्पेसिंग के लिए)
object Constants {
    const val API_KEY = "abc123"
    const val MAX_SIZE = 100
}

// उपयोग
fun main() {
    println(API_KEY)
    println(Constants.MAX_SIZE)
}

निष्कर्ष

  • Companion Object - अधिकांश Kotlin-ओनली कोड के लिए डिफ़ॉल्ट विकल्प
  • @JvmStatic पर Object - जब Java कोड से वास्तविक static एक्सेस की आवश्यकता हो
  • शीर्ष-स्तर const val - सरल स्थिरांक के लिए सर्वोत्तम
  • Kotlin में `static` कीवर्ड नहीं है, लेकिन ये पैटर्न समान कार्यक्षमता प्रदान करते हैं
  1. Java में JViewport क्लास का महत्व क्या है? Java में JViewport क्लास का महत्व क्या है?

    JViewport एक JViewport क्लास मूल स्क्रॉलिंग मॉडल को परिभाषित करती है और इसे तार्किक स्क्रॉलिंग और पिक्सेल-आधारित स्क्रॉलिंग दोनों का समर्थन करने के लिए डिज़ाइन किया गया है। व्यूपोर्ट का चाइल्ड जिसे व्यू कहा जाता है, JViewport.setViewPosition() विधि को कॉल करके स्क्रॉल किया जाता है। एक JViewport क्

  1. Java में Container क्लास का महत्व क्या है? Java में Container क्लास का महत्व क्या है?

    Container एक Container क्लास को एक विशेष घटक के रूप में वर्णित किया जा सकता है जो घटकों के संग्रह को धारण कर सकता है। दो प्रकार के स्विंग कंटेनर हैं, वे हैं टॉप-लेवल कंटेनर और लो-लेवल कंटेनर। टॉप-लेवल कंटेनर हैवीवेट कंटेनर हैं जैसे JFrame, JApplet, JWindow, और JDialog। लो-लेवल कंटेनर लाइटवेट कंटेन

  1. Java में CardLayout क्लास का महत्व क्या है? Java में CardLayout क्लास का महत्व क्या है?

    CardLayout की कार्यक्षमता घटकों को क्रमिक तरीके से व्यवस्थित करती है और एक समय में केवल एक घटक दिखाई देता है और प्रत्येक घटक को एक कार्ड के रूप में माना जाएगा। CardLayout CardLayout अन्य लेआउट से अलग है जहां अन्य लेआउट प्रबंधक कंटेनर के भीतर सभी घटकों को एक साथ प्रदर्शित करने का प्रयास करते हैं, C