/ / सामान्य प्रकार सरणी और सामान्य प्रकार वर्ग के साथ कैसे काम करें? - पपड़ी

जेनेरिक टाइप सरणी और जेनेरिक टाइप क्लास के साथ कन्स्ट्रक्टर में पैरामीटर के रूप में कैसे काम करें? - स्कैला

मैं निम्नलिखित सरल जावा कोड को स्कैला कोड में बदलना चाहता हूं। मुझे पता है T <: Comparable[T] के लिए इस्तेमाल किया जाएगा T extends Comparable। सामान्य प्रकार के सरणी के लिए, मुझे या तो उपयोग करना होगा Manifest या ClassManifest लेकिन मैं दो निर्माणकर्ताओं को स्कैला कोड के लिए परिवर्तित नहीं कर सका।

public class MyClass<T extends Comparable> {

private static int MAX_SIZE = 40;
private T[] array;
private int count = 0;

public MyClass(Class<T> clazz) {
this(clazz, MAX_SIZE);
}

public MyClass(Class<T> clazz, int size) {
array = (T[]) Array.newInstance(clazz, size);
}
}

उत्तर:

जवाब के लिए 2 № 1

यह एक स्केल स्केच है जो एक स्काला वर्ग जैसा दिखेगा:

import scala.reflect.ClassTag

class MyClass[T : Ordered : ClassTag](size: Int) {
val arr: Array[T] = new Array[T](size)

def this() {
this(40)
}
}

स्काला सहायक निर्माता प्रारंभिक आदेश के कारण, आप "टी एक्सेस" कर सकते हैं this कंस्ट्रक्टर के अंदर (यही कारण है कि मैं हार्ड कोडित हूं 40 सेटिंग्स के बजाय एक अधिकतम मूल्य क्षेत्र)। यदि आप उस के आसपास जाना चाहते हैं, तो आप एक साथी वस्तु को परिभाषित कर सकते हैं MyClass एक साथ apply विधि जो कोई तर्क नहीं लेती है:

import scala.reflect.ClassTag

class MyClass[T : Ordered : ClassTag](size: Int) {
val arr: Array[T] = new Array[T](size)
}

object MyClass {
final val maxSize: Int = 40
def apply[T : Ordered : ClassTag]() = new MyClass[T](maxSize)
}

और फिर इसे इस तरह से उपयोग करें:

val clz = MyClass[Int]()