سؤال

ولقد تم في محاولة لتوسيع الطبقة ArrayList دون نجاح يذكر. أود أن أتوجه إليها، وتكون قادرة على بالحدود ذلك.

وهكذا عادة لديك شيء من هذا القبيل

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

وأريد

MyList<SomeObject> list = new MyList<SomeObject>();

وببساطة تمديد لا تعمل ArrayList.

public class MyList extends ArrayList ...

وعندما أحاول استخدامه أحصل على الخطأ

<اقتباس فقرة>   

ونوع قائمتي ليست عامة؛ هذا   لا يمكن معلمات بحجج   

ولقد حاولت الاختلافات

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

ومع أي نجاح، وإذا كنت تستخدم subobject وراء اسم الفئة يبدو للعمل، ولكن يخفي الأساليب في الفئة subobject لسبب ما.

وتحظى بتقدير أية أفكار أو اقتراحات حول كيفية الحصول على هذا الحق العاملة.

هل كانت مفيدة؟

المحلول

وتحتاج إلى تحديد نوع للمعلمة النوع ArrayList ل. لمعلمات نوع عام، T هو شائع إلى حد ما. منذ المترجم لا يعرف ما هو T، تحتاج إلى إضافة معلمة نوع لMyList التي يمكن أن يكون لها نوع مرت في هكذا تحصل عليه:.

public class MyList<T> extends ArrayList<T>

وبالإضافة إلى ذلك، قد ترغب في النظر في تنفيذ List وتفويض إلى ArrayList، بدلا من وراثة من ArrayList. "صالح تكوين الكائن على الميراث الطبقة. [<م> أنماط التصميم ص. 20]"

نصائح أخرى

public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

أو

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

ويجب أن لا تمديد ArrayList، تمديد AbstractList بدلا من ذلك:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top