+1 امتیاز
قبل در برنامه نویسی توسط (15 امتیاز)
ویرایش شده قبل توسط

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

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 مشتق شده‌اند. این موضوع برای آرایه‌ها هم وجود دارد.

2 پاسخ

0 امتیاز
قبل توسط (851 امتیاز)

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

مثلا

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

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

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

به این مفهومی که شما میگید در مبحث 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;

سوالات مشابه

+1 امتیاز
1 پاسخ 615 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
+2 امتیاز
2 پاسخ 884 بازدید
+1 امتیاز
1 پاسخ 1.9هزار بازدید
0 امتیاز
1 پاسخ 679 بازدید
+1 امتیاز
1 پاسخ 1.1هزار بازدید
+1 امتیاز
1 پاسخ 1.4هزار بازدید
0 امتیاز
0 پاسخ 322 بازدید
...