是否可以创建一个扩展ArrayList的子类?如果是这样,怎么样?你可以在Java中扩展ArrayList吗?
回答
你可以扩展任何类,是不是在Java中最后。话虽如此,如果没有真是is-a的关系,你应该避免继承。考虑构成重用。阅读关于Liskov substitution principle
为什么不呢?
import java.util.ArrayList;
public class Foo<T> extends ArrayList<T> {
// ...
}
试试吧。这个类不是最终的,它的构造函数是公共的,所以你可以。但是,初学者可能不是个好主意。
大多数时候,对任何人来说都不是好主意。想象一下,你添加一些功能,并得到ExtList1 extends ArrayList
。你们大学增加了不同的独立功能,所以你有ExtList2 extends ArrayList
。现在你想要他们,而且你运气不好。
或者您需要使用不同基本列表实现的相同功能(可能是LinkedList
,尽管使用它实际上总是错误的)。再次,运气不好。
这些都是代表团获胜时的情况。当someone has created the base already时,它不需要更详细。
我只从ArrayList
继承,如果有一个很好的理由正是该做的事情。也许一些真正极端性能要求基于正确的JMH基准。
是的,你可以。
public class MyArrayList<E> extends ArrayList<E>
{
}
但是,我不知道为什么你会想这样做。
重命名它比ArrayList更令人敬畏的方式,当然。 - > List l = new MySuperAwesomeSandwichMakingConstantTimeLookupSwissArmyList(); – b3bop
hahahahhhahabhahahahaha幽默回复...暴徒生活b3op –
把一个断点,例如 –
是的,ArrayList不是final
。使用这种方法。
class Foo<T> extends ArrayList<T>
import java.util.ArrayList;
public class MyArrayList<T> extends ArrayList<T> {
//Add extra or override methods here...
}
的ArrayList是不是最终的类,它提供了公共的构造,所以在技术上可以延长。
但最佳做法是代表而不是延长。 请参阅:Decorator pattern
嗯......在所有情况下,**都不是使用委托代替继承**的最佳实践。你应该根据具体情况做出决定。 –
正如许多其他人所说,是的,你可以扩展类ArrayList
,但它不是你通常应该做的;在Java中它不被认为是好的做法。
我主要是一个Java程序员,但过去几个月我也一直在研究C#代码。如果你需要一个特定类型的集合,它似乎是C#中扩展标准集合类的一个常见习惯用法(我实际上不知道它是否是一般的普通习惯用法 - 至少编写代码的人是'我一直在做这件事)。
所以,如果他们有一个类Person
,他们需要的人的名单,他们会创建一个类PersonList
,它扩展了C#相当于ArrayList<Person>
。
如果您需要一个Person
对象的列表,而不是为此创建特定的子类,Java中常见的习惯用法就是使用ArrayList<Person>
。
我建议你坚持使用常见的Java方法,而不是创建自己的ArrayList
或其他集合类的子类。
嘿。既然你建议不要重写这个类,那么当一个项目被添加到一个列表中时,我将如何获得回调? – Sipty
@Sipty对于这样的事情,你真的想添加新的功能,而不是只使用特定的类型参数(如我在上面的描述中),在我看来,创建一个子类是合法的。 – Jesper
@Sipty覆盖是一个选项,但想象你的大学增加了一个不同的独立功能,所以你有'ExtList1扩展ArrayList'和'ExtList2扩展ArrayList'。现在你想要他们,而且你运气不好。或者你需要与不同的基础列表实现相同的功能(也许'LinkedList',尽管使用它实际上总是错误的)。这些都是代表团获胜的情况。当[某人已经创建了该基础]时,它不必更冗长(https://google.github.io/guava/releases/23.0/api/docs/com/google/common/collect/ForwardingList.html)。 – maaartinus
- 1. 你可以扩展一个枚举吗?
- 2. 我可以在扩展Thread的类中使用ArrayList吗?
- 3. 你可以把可扩展列表可扩展列表中
- 4. 你可以在Chrome扩展中使用jQuery POST吗?
- 5. 你可以在jQuery中扩展val()函数吗?
- 6. 你可以在一个类中扩展两个类吗?
- 7. 你可以在扩展测试中使用断点吗?
- 8. 你可以在TypeScript中扩展一个HTMLDivElement吗?
- 9. 我可以在UIViewController中扩展viewWillAppear吗?
- 10. 可以在Typescript中扩展类型吗?
- 11. 在Javascript中,您可以扩展DOM吗?
- 12. 我可以在SMLNJ中扩展typedef吗?
- 13. 你可以修改Safari扩展中的http请求标头吗?
- 14. 你可以在类型数组上写扩展方法吗?
- 15. Servlets可以扩展吗?
- 16. RestEasy可以扩展@Path吗?
- 17. 在Java中,匿名类可以扩展另一个类吗?
- 18. 你能扩展self.included吗?
- 19. 你可以扩展初始化模型吗?
- 20. 你可以扩展一个果园模块吗?
- 21. 你可以使用shell参数扩展匹配数字吗?
- 22. 你可以使用HipHop PHP构建一个php扩展吗?
- 23. Java - 你可以将一个对象转换成它没有扩展的类吗?
- 24. 用Java中的抽象类扩展ArrayList?
- 25. 我可以切换扩展器的可扩展性吗?
- 26. Java 7可以使用Apple Java扩展吗?
- 27. 你可以添加你称之为静态方法的扩展方法吗?
- 28. 我可以像在C#中一样在Java中创建扩展吗?
- 29. 当扩展B安装时,chrome.management.onInstalled.addListener警报扩展A可以吗?
- 30. firefox扩展可以启用/禁用其他扩展工作吗?
@Rakesh Juyal是的,我做了尝试,我遇到了一些问题。所以我只是确定。 – nambvarun
发布你遇到的问题? –