جنریکها (Generics) در جاوا به ما اجازه میدهند تا کلاسها، اینترفیسها و متدها را به صورت پارامتری تعریف کنیم، به طوری که نوع دادهها به صورت پارامتری تعریف شوند. این قابلیت باعث میشود کد ما انعطافپذیرتر و ایمنتر شود.
تعریف جنریکها در کلاسها
میتوانیم یک کلاس جنریک تعریف کنیم که نوع دادههای ورودی آن به صورت پارامتری مشخص شود. به عنوان مثال، یک کلاس جنریک به نام Box که میتواند هر نوع دادهای را نگهداری کند:
public class Box {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
در اینجا، T یک پارامتر نوع است که میتواند هر نوع دادهای باشد. حالا میتوانیم از این کلاس برای نگهداری هر نوع دادهای استفاده کنیم:
public class Main {
public static void main(String[] args) {
Box intBox = new Box<>();
intBox.setContent(123);
System.out.println("Integer Box: " + intBox.getContent());
محدود کردن پارامترهای نوع
میتوانیم پارامترهای نوع را محدود کنیم تا فقط نوعهای خاصی را قبول کنند. برای این کار از کلیدواژه extends استفاده میکنیم. به عنوان مثال، یک کلاس جنریک که فقط نوعهای فرزند Number را قبول میکند:
public class NumericBox {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
public double doubleValue() {
return content.doubleValue();
}
}
استفاده از wildcard
در جاوا، از ? به عنوان wildcard استفاده میشود تا به هر نوعی اشاره کند. به عنوان مثال، یک لیست از هر نوع دادهای:
public class WildcardDemo {
public static void printList(List<?> list) {
for (Object elem : list) {
System.out.println(elem);
}
}
جنریکها در جاوا به ما اجازه میدهند تا کدهایی انعطافپذیرتر و ایمنتر بنویسیم. با استفاده از جنریکها، میتوانیم کلاسها، متدها و اینترفیسهایی بنویسیم که با هر نوع دادهای کار کنند، بدون اینکه نیاز باشد برای هر نوع دادهای یک نسخه مجزا ایجاد کنیم.
جنریکها (Generics) در جاوا به ما اجازه میدهند تا کلاسها، اینترفیسها و متدها را به صورت پارامتری تعریف کنیم، به طوری که نوع دادهها به صورت پارامتری تعریف شوند. این قابلیت باعث میشود کد ما انعطافپذیرتر و ایمنتر شود.
تعریف جنریکها در کلاسها میتوانیم یک کلاس جنریک تعریف کنیم که نوع دادههای ورودی آن به صورت پارامتری مشخص شود. به عنوان مثال، یک کلاس جنریک به نام Box که میتواند هر نوع دادهای را نگهداری کند:
public class Box {
private T content;
}
در اینجا، T یک پارامتر نوع است که میتواند هر نوع دادهای باشد. حالا میتوانیم از این کلاس برای نگهداری هر نوع دادهای استفاده کنیم: public class Main { public static void main(String[] args) { Box intBox = new Box<>();
intBox.setContent(123);
System.out.println("Integer Box: " + intBox.getContent());
}
تعریف جنریکها در متدها متدهای جنریک نیز مشابه کلاسهای جنریک تعریف میشوند. به عنوان مثال، یک متد جنریک که دو عنصر را جابجا میکند:
public class Utility { public static void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
میتوانیم این متد را به صورت زیر استفاده کنیم:
public class Main { public static void main(String[] args) { Integer[] intArray = {1, 2, 3, 4}; Utility.swap(intArray, 1, 2); System.out.println("Swapped Integer Array: " + Arrays.toString(intArray));
}
محدود کردن پارامترهای نوع میتوانیم پارامترهای نوع را محدود کنیم تا فقط نوعهای خاصی را قبول کنند. برای این کار از کلیدواژه extends استفاده میکنیم. به عنوان مثال، یک کلاس جنریک که فقط نوعهای فرزند Number را قبول میکند:
public class NumericBox {
private T content;
}
استفاده از wildcard در جاوا، از ? به عنوان wildcard استفاده میشود تا به هر نوعی اشاره کند. به عنوان مثال، یک لیست از هر نوع دادهای:
public class WildcardDemo { public static void printList(List<?> list) { for (Object elem : list) { System.out.println(elem); } }
}
جنریکها در جاوا به ما اجازه میدهند تا کدهایی انعطافپذیرتر و ایمنتر بنویسیم. با استفاده از جنریکها، میتوانیم کلاسها، متدها و اینترفیسهایی بنویسیم که با هر نوع دادهای کار کنند، بدون اینکه نیاز باشد برای هر نوع دادهای یک نسخه مجزا ایجاد کنیم.