मैं निम्नलिखित सरल जावा कोड को स्कैला कोड में बदलना चाहता हूं। मुझे पता है 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]()