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

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

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

    public int size() {
        return size;
    }

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

سوال 1 سال قبل در تالار برنامه نویسی توسط 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);
    }
جواب 1 سال قبل توسط HA (192 امتیاز)
ویرایش 5 ماه قبل توسط 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.27141 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 0.18154 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.11165 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.09105 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.13200 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.06116 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.2279 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.68547 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.68557 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.0772 بازدید
کانال تلگرام جواب یاب
...