چرا در جاوا لیست و یا آرایه‌ای از Integer آبجکتی از جنس Number نیست؟

+1 رأی
میانگین بازدید روزانه 0.83153 بازدید

لطفا به کد زیر توجه کنید

import java.util.ArrayList;
import java.util.List;

public class App {

  public static void main(String[] args) {
    List<Number> numbers = new ArrayList<>();
    List<Integer> integers = new ArrayList<>();
    integers = numbers; // Error:(12, 16) java: incompatible types: java.util.List<java.lang.Number> cannot be converted to java.util.List<java.lang.Integer>

    Integer[] i = new Integer[5];
    Number[] n = new Number[5];
    i = n;  // Error:(15, 9) java: incompatible types: java.lang.Number[] cannot be converted to java.lang.Integer[]
  }

همانطور که در کد مشاهده می‌کنید؛ لیستی از Integerها نمی‌تواند آبجکتی از جنس لیستی از Numberها باشد. در صورتی که کلاس‌های عددی مثل Long, Integer و ... همگی از کلاس Number مشتق شده‌اند. این موضوع برای آرایه‌ها هم وجود دارد.

سوال 6 ماه قبل در تالار برنامه نویسی توسط sina.deuxshiri (10 امتیاز)
ویرایش 5 ماه قبل توسط Saeed Zarinfam

2 جواب

0 رأی

وقتی بخواهید شیئی از جنس ابرکلاس را در شیئی از جنس زیرکلاس بریزید باید آن را cast کنید.

مثلا

Number number = 10;
Integer integer = 20;
integer = (Integer) number;

در این مثال چون Number ابرکلاس Integer هست، وقتی میخواستیم یک شئ از جنس Number را در Integer بریزیم آن را cast کردیم.

جواب 6 ماه قبل توسط Reza.R (831 امتیاز)
دوست عزیز ابتدا سپاسگزارم برای پاسختون.
اما توجه کنید که من در حالت لیست و یا آرایه مطرح کردم. یعنی لیستی از Integer‌ها حتی با Cast کردن هم آبجکتی از جنس لیستی از Number نیست. و یا برعکس.
0 رأی

به این مفهومی که شما میگید در مبحث generics میگن Covariance و خلاصه تعریفش میشه:

اگه Integer فرزند Number پس لیست Integer هم باید فرزند لیست Number باشه.

برای پیاده سازی مفهوم Covariance در جاوا باید از upper-bound و lower-bounded بهمراه wildcard استفاده کنید:

        List<Number> numbers = new ArrayList<>();
        List<? super Integer> integers = new ArrayList<>();
        // or List<? extends Number> integers = new ArrayList<>();
        integers = numbers;
جواب 5 ماه قبل توسط Saeed Zarinfam (478 امتیاز)

سوال های مشابه

+1 رأی
1 جواب میانگین بازدید روزانه 0.16224 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.26650 بازدید
سوال 6 سال قبل در تالار برنامه نویسی توسط مسافر (882 امتیاز)
+2 رأی
2 جواب میانگین بازدید روزانه 0.2496 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.34865 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.16293 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.27199 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.24578 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.1257 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.23156 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.3158 بازدید
کانال تلگرام جواب یاب
...