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

سلام. من قصد دارم پیاده سازی متد‌ها در جاوا رو ببینم. به عنوان مثال متد size که در اینترفیس List تعریف شده. من به عنوان مثال کلاس ArrayList که یکی از پیاده سازی‌های اینترفیس List است و نگاه کردم. اما هیچ پیاده سازی‌ای پیدا نکردم. مثلا تکه کد زیر و پیدا کردم:

    public int size() {
        return size;
    }

اما می‌خوام بدونم که size چطور اندازه‌ی لیست و بدست میاره که خب در متد بالا مشخص نیست.

1 پاسخ

+3 امتیاز
قبل توسط (347 امتیاز)
ویرایش شده قبل توسط

شما باید specification جاوا  و بصورت دقیقتر  پیاده سازیهای مختلفی که وجو داره رو چک کنید. ولی در مورد این مثال شما,

مقدار size توی متدهایی مثل  add,remove,addall و ... ست میشه.

دوتا از فیلدهای کلاس

  private transient Object[] elementData;

 private int size;

و اولین بار مقداره size داخل یکی از سازنده ها ست میشه

     public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }
قبل توسط (12 امتیاز)
امکانش هست مثلا پیاده‌سازی length و هم بگین کجاست؟
قبل توسط (347 امتیاز)
ویرایش شده قبل توسط
ArrayList بصورت درونی از آرایه استفاده میکنه.
length یه field برای اشیائی از نوع آرایه است. که در واقع طول آرایه رو درون خودش داره. و متد نیست که پیاده سازی داشته باشه. این مقدار همیشه باید موقع ایجاد آرایه مشخص بشه و نمی تونه تغییر کنه. در واقع public final هست.
int[ ]  a = new int[5]  // for example
از اینجاس که مقدار ۵ به length نسبت داده میشه. و قابل تغییر هم نیست.

نوع آرایه یه نوع خاصه .مثلا شما نمی تونید فیلد length رو به این شکل
  Field field = args.getClass().getField("length");     //Returns a Field object that reflects the specified public System.out.println(field.get(args));    // getting the value of the field
بدست بیارید چون اصلا همچین فیلدی رو نمیشناسه و همون خط اول Exception میده.در واقع یک فیلد معمولی نیست!!
برای اطلاعات بیشتر میتونید به specification زبان جاوا مراجعه کنید و اینکه پیاده سازی های مختلف java کجای حافظه این مقدار رو ذخیره میکنن.

سوالات مشابه

+1 امتیاز
2 پاسخ 496 بازدید
+1 امتیاز
1 پاسخ 471 بازدید
+1 امتیاز
1 پاسخ 295 بازدید
+1 امتیاز
1 پاسخ 663 بازدید
0 امتیاز
1 پاسخ 326 بازدید
0 امتیاز
2 پاسخ 522 بازدید
0 امتیاز
1 پاسخ 683 بازدید
+1 امتیاز
1 پاسخ 1.7هزار بازدید
...