Java 扩展ArrayList并创建新方法
我在掌握一些东西方面有点问题——我可能完全错了 我试图创建一个扩展ArrayList的类,但有几个方法可以增加功能(至少对于我正在开发的程序是这样) 其中一个方法是findById(int-id),它搜索每个ArrayList对象以查找特定的id匹配。到目前为止,它还在工作,但它不允许我为(Item i:this){i.getId();} 我不明白为什么 完整代码:Java 扩展ArrayList并创建新方法,java,arraylist,extend,Java,Arraylist,Extend,我在掌握一些东西方面有点问题——我可能完全错了 我试图创建一个扩展ArrayList的类,但有几个方法可以增加功能(至少对于我正在开发的程序是这样) 其中一个方法是findById(int-id),它搜索每个ArrayList对象以查找特定的id匹配。到目前为止,它还在工作,但它不允许我为(Item i:this){i.getId();} 我不明白为什么 完整代码: public class CustomArrayList<Item> extends ArrayList<Ite
public class CustomArrayList<Item> extends ArrayList<Item> {
// declare singleton instance
protected static CustomArrayList instance;
// private constructor
private CustomArrayList(){
// do nothing
}
// get instance of class - singleton
public static CustomArrayList getInstance(){
if (instance == null){
instance = new CustomArrayList();
}
return instance;
}
public Item findById(int id){
Item item = null;
for (Item i : this) {
if (i.getId() == id) {
// something
}
}
return item;
}
public void printList(){
String print = "";
for (Item i : this) {
print += i.toString() + "\n";
}
System.out.println(print);
}
}
公共类CustomArrayList扩展了ArrayList{
//声明单例实例
受保护的静态CustomArrayList实例;
//私有构造函数
私有CustomArrayList(){
//无所事事
}
//获取类的实例-singleton
公共静态CustomArrayList getInstance(){
if(实例==null){
实例=新的CustomArrayList();
}
返回实例;
}
公共项findById(int-id){
Item=null;
(第一项:本){
if(i.getId()==id){
//某物
}
}
退货项目;
}
公共作废打印列表(){
字符串打印=”;
(第一项:本){
print+=i.toString()+“\n”;
}
系统输出打印项次(打印);
}
}
更改
public class CustomArrayList<Item> extends ArrayList<Item> {
显然,这并不总是有效的,因为t
可以引用任何类型。什么是getId()
?可能它是某个类中的一个方法,但我们不知道是哪个类
如果您实际拥有一个名为Item
的类,该类具有getId()
方法,这意味着它是一个。因此,与此相反:
public class CustomArrayList<Item> extends ArrayList<Item> {
公共类CustomArrayList扩展了ArrayList{
你想要:
public class CustomArrayList extends ArrayList<Item> {
公共类CustomArrayList扩展了ArrayList{
当前在您的类中,Item
并不是指一个名为Item的类,而是指一个名为Item
的类型参数
现在我个人:
- 除非你真的必须这样做,否则我不会避免创造单身
- 如果必须这样做,我会避免以您现有的方式创建它们(这不是线程安全的)
- 我不会扩展
,除非我真的必须扩展,我更喜欢组合而不是继承ArrayList
项
支持各种元素类型,请使用<代码>公共类ItemArrayList扩展了ArrayList{…}。我创建一个单例的原因是我只能有一个。我知道我创建它的方式不是线程安全的-我需要一个“锁定方法”,对吗?发布的aioobe解决了我的问题,但我仍然对创建线程安全的单例程序感兴趣。在Java 1.5+中创建单例程序的首选方法是使用枚举。例如,请参见以下问题:
public class CustomArrayList<Item> extends ArrayList<Item> {
public class CustomArrayList extends ArrayList<Item> {