از کجا پیاده‌سازی متد‌ها در جاوا را پیدا کنیم؟

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

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

    public int size() {
        return size;
    }

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

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

1 جواب

+3 رأی

شما باید 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);
    }
جواب 6 ماه قبل توسط HA (152 امتیاز)
ویرایش 1 هفته قبل توسط HA
امکانش هست مثلا پیاده‌سازی length و هم بگین کجاست؟
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 جواب میانگین بازدید روزانه 0.37132 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 0.2139 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.11149 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.199 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.13180 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.06110 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.3572 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.67430 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.77505 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.0866 بازدید
کانال تلگرام جواب یاب
...