آموزش کلاس های جنریک در جاوا، جامع و کاربردی
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
آموزش کلاسهای جنریک در جاوا، جامع و کاربردی
در این جلسه میخواهیم با کلاسهای جنریک در جاوا آشنا شویم.
گاهی ممکن است دو یا چند کلاس برای کار با نوع داده های مختلف ایجاد کنیم به عنوان مثال یک کلاس برای کار با مقادیر رشته ای و یک کلاس برای کار با مقادیر عددی. اما به کمک جنریک ها شاید بشود این دو کلاس را ترکیب کرد که هم بتوان با نوع داده عددی کار کرد و هم نوع داده رشته ای(البته همه کلاسها را نمیتوان جنریک تعریف کرد و با توجه به نیازی که در برنامه هست باید انجام شود).
در گذشته نیز ما با کلاسهای جنریک کار کردیم به عنوان مثال در ArrayList باید نوع داده را درون <> مشخص می کردیم.
ArrayList<Integer> numbers1=new ArrayList<>(Arrays.asList(12,34,6,57));
ArrayList<String> names=new ArrayList<>(Arrays.asList("mehdi","ali"));
برای ساخت کلاس جنریک بعد از نام کلاس باید علامت <> را نوشت و یک نام به عنوان پارامتر درون آن نوشت، درواقع نام پارامتر نماد نوع داده است.
نکته: معمولا نام پارامتر بهتر است یک حرفی باشد و حتما با حرف بزرگ نوشته شود.
معمولا نام پارامترها را برحسب زیر انتخاب میکنند:
- T – Type
- E – Element
- K – Key
- N – Number
- V – Value
public class MyClass2<T> {
T data;
}
همانطور که گفتیم نام پارامتر نماد نوع داده است و میتوانیم درون کلاس از آن نمونه تعریف کنیم. و همچنین میتوانیم تابع سازنده و تابع setter و getter تعریف کنیم.
public class MyClass2<T> {
T data;
public MyClass2(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
نحوه تعریف از کلاس جنریک در MainClass:
public static void main(String[] args) {
MyClass2<Integer> m1=new MyClass2<>(200);
MyClass2<String> m2=new MyClass2<>("ali");
MyClass2<Double> m3=new MyClass2<>(3.14);
Integer x=m1.getData();
String s=m2.getData();
Double d=m3.getData();
}
همانطور که در بالا مشاهده میکنید بعد از نوشتن نام کلاس نوع داده را تعریف کردیم و نمیتوانیم در تابع سازنده داده ای غیر از نوع تعریف شده را قرار دهیم.
همچنین زمانی که تابع getData را صدا میزنیم خروجی آن نوع داده ای است که در ابتدای تعریف شی آن را قرار داده ایم.
Bounded Type Parameters:
از Bounded Type ها برای محدود کردن نوع داده ها استفاده میشود به عنوان مثال میخواهیم فقط نوع داده های عددی (int, float, long, short, byte, …) وارد شود.
public class MyClass3<T1 extends Number,T2 extends String>{
T1 x;
T2 y;
public MyClass3(T1 x, T2 y) {
this.x = x;
this.y = y;
}
public T1 getX() {
return x;
}
public void setX(T1 x) {
this.x = x;
}
public T2 getY() {
return y;
}
public void setY(T2 y) {
this.y = y;
}
}
در بالا یک کلاس جنریک تعریف کردیم که 2 پارامتر دارد، پارامتر اول فقط باید از نوع اعداد باشد(int, long, double, short, byte, ...) پارامتر دوم میتواند هر نوع داده ای باشد.
نکته: کلاسهای جنریک میتوانند چندین پارامتر ورودی داشته باشند.
یادگیری عمیق این درس نیازمند مطرح کردن سوال و دیدن جلسات بیشتر از این دوره است که شما میتوانید از دیگر دوستان خود که این دوره را تهیه کردهاند در انجمن برنامه نویسان جاوا سوالات خود را پرسیده و ابهاماتتان را برطرف کنید.
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.