در جاوا Genericها راهی هستند برای تعریف interface ،class و methodهایی که با یک بار پیاده سازی، میتوانند برای انواع داده ها استفاده شوند.
با یک مثال ساده شروع کنیم:
public class GenericClass<T> { private T t; // T به عنوان "Type" public void set(T t) { this.t= t; } public T get() { return t; } }
در این مثال ،GenericClass
یک کلاس generic است که یک نوع پارامتری T
را استفاده میکند. میتوانید هنگام ایجاد یک نمونه ازGenericClass،
نوع دادهای که میخواهید در آن استفاده کنید را مشخص کنید:
GenericClass<Integer> integerGenericClass = new GenericClass<Integer>(); integerGenericClass.set(10); // در اینجا عدد ذخیره کردیم GenericClass<String> stringGenericClass = new GenericClass<String>(); stringGenericClass.set("Hello World"); // در اینجا رشته ذخیره کردیم
1. یک Type Safety:
با استفاده از generic، می توانید از خطاهای data type در زمان اجرا (Runtime error) جلوگیری کنید. به عنوان مثال، اگر یک کلاس generic را به درستی تعریف کنید و نوع داده نادرستی به آن پاس دهید، قبل از اجرای برنامه خطا را دریافت خواهید کرد. این به شما کمک می کند که خطاهای نوع را در compile time تشخیص دهید. ولی در کلاس های عادی (non-generic) خطاهای نوع (type errors) در زمان اجرا مشخص میشوند.
2. قابلیت استفاده مجدد (Reusability):
گفتیم که با استفاده از generic، می توانید کدهایی را بنویسید که برای تعداد زیادی از data typeها قابل استفاده باشد پس، شما می توانید یک بلاک کد را بنویسید و آن را برای هر data typeی که می خواهید استفاده کنید.
3. حذف تبدیل نوع داده (Elimination of Casts):
نیاز به تبدیل نوع (casting) نیست، چرا که کامپایلر از نوع دادهها آگاه است. Genericها میتوانند برای کلاسها، رابطها، متدها و حتی کلاسهای داخلی استفاده شوند. به علاوه، میتوانند محدودیتهایی داشته باشند (مثل extends یا super) که مشخص میکنند کدام نوع دادهها میتوانند به عنوان پارامتر پاس داده شوند.
فعلا