如何参数化扩展集合

发布于 2024-07-15 10:59:09 字数 747 浏览 7 评论 0原文

我一直在尝试扩展 ArrayList 类,但没有取得太大成功。 我想扩展它,并能够参数化它。

所以通常你有像

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

我想要的

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

东西简单地扩展ArrayList是行不通的。

public class MyList extends ArrayList ...

当我尝试使用它时出现错误

MyList 类型不是通用的; 它 不能用实参进行参数化 <某个对象>

我尝试过各种变体,

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

但没有成功,如果我使用类名后面的子对象,它似乎可以工作,但由于某种原因隐藏了子对象类中的方法。

任何有关如何使其正常工作的想法或建议都将受到赞赏。

I've been trying to extend the ArrayList class without much success. I want to extend it, and be able to parameterize it.

So normally you have something like

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

I want

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

Simply extending ArrayList doesn't work.

public class MyList extends ArrayList ...

The when I try to use it I get the error

The type MyList is not generic; it
cannot be parameterized with arguments
<SomeObject>

I've tried variations of

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

with no success, If I use the subobject behind the class name it appears to work, but hides methods in the subobject class for some reason.

Any thoughts or suggestions on how to get this working right are appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

与往事干杯 2024-07-22 10:59:09

您需要为 ArrayList 的类型参数指定类型。 对于泛型类型参数,T 相当常见。 由于编译器不知道 T 是什么,因此您需要向 MyList 添加一个可以传入类型的类型参数。因此,您会得到

public class MyList<T> extends ArrayList<T>

:您可能需要考虑实现List并委托给ArrayList,而不是从ArrayList继承。 “优先考虑对象组合而不是类继承。[设计模式第 20 页]”

You need to specify a type for the ArrayList's type parameter. For generic type parameters, T is fairly common. Since the compiler doesn't know what a T is, you need to add a type parameter to MyList that can have the type passed in. Thus, you get:

public class MyList<T> extends ArrayList<T>

Additionally, you may want to consider implementing List and delegating to an ArrayList, rather than inheriting from ArrayList. "Favor object composition over class inheritance. [Design Patterns pg. 20]"

吃不饱 2024-07-22 10:59:09
public class MyList<T> 
    extends ArrayList<T>
{
}

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

或者

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();
public class MyList<T> 
    extends ArrayList<T>
{
}

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

or

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();
牵强ㄟ 2024-07-22 10:59:09

您不应该扩展 ArrayList,而是扩展 AbstractList 相反:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}

You shouldn't extend ArrayList, extend AbstractList instead:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文