ماڈیول اسباق (2/2)
جاوا میں عمومیات
Generics (Generic Types) کو جاوا میں متعارف کرایا گیا تھا تاکہ کلاسز، انٹرفیسز اور طریقوں کو مختلف اقسام پر پیرامیٹرز کے طور پر کام کرنے کی اجازت دی جا سکے۔ یہ کمپائل ٹائم ٹائپ سیفٹی کو یقینی بناتا ہے اور رن ٹائم پر مہنگی واضح کاسٹ سے بچتا ہے۔
جنرک کلاسز
ایک عام کلاس کی تعریف زاویہ بریکٹ <T> کا استعمال کرتے ہوئے کی جاتی ہے جہاں T اس قسم کے لیے پلیس ہولڈر کے طور پر کام کرتا ہے جس کی وضاحت اس وقت کی جائے گی جب کلاس شروع کی جائے گی۔
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}ایک Box آبجیکٹ بناتے وقت، ہم اصل قسم کی وضاحت کرتے ہیں:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!عام طریقے
آپ ایک واحد عام طریقہ کی وضاحت کر سکتے ہیں جو مختلف قسم کے پیرامیٹرز کو قبول کر سکتا ہے۔ قسم کا پیرامیٹر طریقہ کی واپسی کی قسم سے پہلے رکھا جاتا ہے۔
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}وائلڈ کارڈز اور باؤنڈڈ اقسام
ہم کسی مخصوص قسم یا اس کے ذیلی طبقات کو قبول کرنے کے لیے extends کلیدی لفظ (اوپری باؤنڈ) کا استعمال کرتے ہوئے عام کی طرف سے قبول کردہ اقسام کو محدود کر سکتے ہیں۔
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}خود ہی آزمائیں۔
حاصل کرنے والے getValue() کی وضاحت کرتے ہوئے عام کلاس باکس کو مکمل کریں جو T واپس کرتا ہے اور سیٹر setValue(T ویلیو) جو نجی متغیر کی قدر کو متعین کرتا ہے۔
اشارہ دکھائیں۔
عام قسم کے پیرامیٹر `T` کا استعمال کرتے ہوئے درست دستخط کے ساتھ طریقے لکھیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ایک جامد عام طریقہ پرنٹ آرے بنائیں جو T[] نامی سرنی کی ایک صف لیتا ہے اور ہر ایک کے لیے لوپ کا استعمال کرتے ہوئے ہر عنصر کو پرنٹ کرتا ہے۔
اشارہ دکھائیں۔
ٹائپ پیرامیٹر `<T>` کو `static` کے فوراً بعد اور واپسی کی قسم `void` سے پہلے رکھا جانا چاہئے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ایک جامد کلاس StringContainer بنائیں جو String کے ساتھ پیرامیٹرائزڈ کنٹینر انٹرفیس کو نافذ کرے۔ ایک کنسٹرکٹر کی وضاحت کریں جو String پیرامیٹر لیتا ہے اور getItem() طریقہ کو نافذ کرتا ہے۔
اشارہ دکھائیں۔
کلاس کے دستخط میں عام قسم `T` کو `String` کے ساتھ اور `getItem()` کی واپسی کی قسم میں تبدیل کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔