2011-09-13 57 views
0

import java.util.AbstractList;覆盖继承的方法

公共类套装扩展AbstractList的{

private Item[] arr; 
private ItemClass itemClass; 

public ItemSet(Item item) { 
arr = new Item[1]; 
arr[0] = item; 
} 

/* 
* (non-Javadoc) 
* 
* @see java.util.AbstractList#add(java.lang.Object) 
*/ 
@Override 
public boolean add(Item e) { 
boolean isNotAdded = true; 
for (int i = 0; i < arr.length; i++) { 
    if (e.getRule().compareTo(arr[i].getRule())) { 
    if (e.getDot() == arr[i].getDot()) { 
     isNotAdded = false; 
     break; 
    } 
    } 
} 
if (isNotAdded) { 
    Item[] oldArr = arr; 
    arr = new Item[oldArr.length + 1]; 
    System.arraycopy(oldArr, 0, arr, 0, oldArr.length); 
    arr[oldArr.length] = e; 
} 
return isNotAdded; 
} 

@Override 
public Item get(int index) { 
return arr[index]; 
} 

@Override 
public int size() { 
return arr.length; 
} 

// SETTER 

/** 
* @param itemClass 
*   the itemClass to set 
*/ 
public void setItemClass(ItemClass itemClass) { 
this.itemClass = itemClass; 
} 

// 

// GETTER 

/** 
* @return the itemClass 
*/ 
public ItemClass getItemClass() { 
return itemClass; 
} 
// 

}

如何支付实例移除的方法呢? 如何不使用自己的列表实现?

+1

你所说的“覆盖”是什么意思?请澄清你的问题。 –

+0

我想,他不想实现接口的其他方法。 –

+0

“封面”是“隐藏” – itun

回答

-1

如果您不想继承remove(),那么请不要延伸AbstractList,而应将您想要的方法委托给ArrayList

这样的(和神的爱就不做评论了你的getter和setter方法)

public class ItemSet { 
    private final ArrayList<Item> items = new ArrayList<Item>(); 
    private ItemClass itemClass; 

    public ItemSet(Item item) { 
     items.add(item); 
    } 

    public boolean add(Item e) { 
     boolean isNotAdded = true; 
     for (Item item : items) 
      if (e.getRule().compareTo(item.getRule())) 
       if (e.getDot() == item.getDot()) { 
        isNotAdded = false; 
        break; 
       } 
     // why are you adding here? 
     if (isNotAdded) 
      items.add(e); 
     return isNotAdded; 
    } 

    public Item get(int index) { 
     return items.get(index); 
    } 

    public int size() { 
     return items.size(); 
    } 

    public void setItemClass(ItemClass itemClass) { 
     this.itemClass = itemClass; 
    } 

    public ItemClass getItemClass() { 
     return itemClass; 
    } 
} 
} 
+0

这是一个很好的java编程风格吗?我认为这对调用堆栈是一种负担,不是吗? – itun

+0

在ArrayList中调用add()会在恒定时间内运行。在你的实现System.arraycopy()运行在O(n)时间。这些东西比可能增加可能被优化掉的调用堆栈(?)的差异更大。更薄的公共接口也是更好的设计。 –

+0

在ArrayList中调用add()会在恒定时间内运行。在你的实现System.arraycopy()运行在O(n)时间。我知道这一点,我必须用最快的方式写,所以我不在乎这一点。但是,谢谢。更薄的公共接口也是更好的设计。你什么意思? – itun

3

如果你不想实现该接口的其它方法,简单地定义他们抛出一个异常:

public bool remove(Object o) 
{ 
    throw new UnsupportedOperationException(); 
} 

如果你不想连做,你应该从继承类,而不是实现一个接口。