2011-09-13 5 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

"cover"は "hide"です – itun

答えて

-1

remove()を継承しない場合は、AbstractListを拡張せず、代わりにArrayListにメソッドを委任してください。このよう

(と神の愛のためにあなたのセッターとゲッターコメントはありません)

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(); 
} 

継承する必要がありますがインターフェイスを実装しないでください。

関連する問題