مثال حول Bounded Type Parameters في جافا؟
السلام عليكم، أريد مثال سهل حول Bounded Type Parameters لأن هذا المثال صعب عليّ و لم أفهمه.
public class Main {
// هنا قمنا ببناء دالة نعطيها رقمين من أي نوع, فتقوم بمقارنتهما و ترجع الرقم الأكبر
public static <N extends Number> N max (N x, N y)
{
// حتى نستطيع مقارنتهم, بعدها سيتم إرجاع العدد الأكبر بينهما double هنا سيتم تحويل نوع الأرقام المدخلة إلى النوع
if ( x.doubleValue() > y.doubleValue() )
return x;
else
return y;
}
// هنا قمنا ببناء دالة مشابهة للدالة السابقة, لكنها تقارن ثلاث أرقام مع بعض
public static <N extends Number> N max (N x, N y, N z)
{
// بكل بساطة, تستدعي الدالة السابقة لمقارنة أول عددين, و معرفة الأكبر بينهما
// بعدها تستدعيها من جديد لمقارنة العدد الأكبر بين العددين السابقين مع العدد الأخير
return max( max(x, y), z );
}
public static void main(String[] args) {
// التي تأخذ باراميترين max() هنا قمنا بإجراء ثلاث عمليات مقارنة باستخدام الدالة
// int هنا قمنا بمقارنة رقمين نوعهما
System.out.println( max(3, 7) );
// long مع رقم نوعه float هنا قمنا بمقارنة رقم نوعه
System.out.println( max(5.5F, 8L) );
// long مع رقم نوعه float هنا قمنا بمقارنة رقم نوعه
System.out.println( max(6.9D, 8L) );
// التي تأخذ ثلاث باراميترات max() هنا قمنا بإجراء عمليتين مقارنة تعتمدان على الدالة
// int هنا قمنا بمقارنة ثلاث أرقام نوعهم
System.out.println( max(10, 15, 5) );
// double مع رقم نوعه float مع رقم نوعه int هنا قمنا رقم نوعه
System.out.println( max(11, 12.5F, 17.8D) );
}
}
public class Main {
// هنا قمنا ببناء دالة نعطيها رقمين من أي نوع, فتقوم بمقارنتهما و ترجع الرقم الأكبر
public static <N extends Number> N max (N x, N y)
{
// حتى نستطيع مقارنتهم, بعدها سيتم إرجاع العدد الأكبر بينهما double هنا سيتم تحويل نوع الأرقام المدخلة إلى النوع
if ( x.doubleValue() > y.doubleValue() )
return x;
else
return y;
}
// هنا قمنا ببناء دالة مشابهة للدالة السابقة, لكنها تقارن ثلاث أرقام مع بعض
public static <N extends Number> N max (N x, N y, N z)
{
// بكل بساطة, تستدعي الدالة السابقة لمقارنة أول عددين, و معرفة الأكبر بينهما
// بعدها تستدعيها من جديد لمقارنة العدد الأكبر بين العددين السابقين مع العدد الأخير
return max( max(x, y), z );
}
public static void main(String[] args) {
// التي تأخذ باراميترين max() هنا قمنا بإجراء ثلاث عمليات مقارنة باستخدام الدالة
// int هنا قمنا بمقارنة رقمين نوعهما
System.out.println( max(3, 7) );
// long مع رقم نوعه float هنا قمنا بمقارنة رقم نوعه
System.out.println( max(5.5F, 8L) );
// long مع رقم نوعه float هنا قمنا بمقارنة رقم نوعه
System.out.println( max(6.9D, 8L) );
// التي تأخذ ثلاث باراميترات max() هنا قمنا بإجراء عمليتين مقارنة تعتمدان على الدالة
// int هنا قمنا بمقارنة ثلاث أرقام نوعهم
System.out.println( max(10, 15, 5) );
// double مع رقم نوعه float مع رقم نوعه int هنا قمنا رقم نوعه
System.out.println( max(11, 12.5F, 17.8D) );
}
}
هناك أشياء تم استخدامها و لم يتم شرحها كالجزئية التالية.
// هنا قمنا ببناء دالة نعطيها رقمين من أي نوع, فتقوم بمقارنتهما و ترجع الرقم الأكبر
public static <N extends Number> N max (N x, N y)
{
// حتى نستطيع مقارنتهم, بعدها سيتم إرجاع العدد الأكبر بينهما double هنا سيتم تحويل نوع الأرقام المدخلة إلى النوع
if ( x.doubleValue() > y.doubleValue() )
return x;
else
return y;
}
// هنا قمنا ببناء دالة نعطيها رقمين من أي نوع, فتقوم بمقارنتهما و ترجع الرقم الأكبر
public static <N extends Number> N max (N x, N y)
{
// حتى نستطيع مقارنتهم, بعدها سيتم إرجاع العدد الأكبر بينهما double هنا سيتم تحويل نوع الأرقام المدخلة إلى النوع
if ( x.doubleValue() > y.doubleValue() )
return x;
else
return y;
}
الرمز <N>
هو اختصار لـNumber و هو مجرد عرف يعني الكلاس يتعامل مع الأرقام كيف تم عمل وراثة داخله؟