2012-08-26 38 views
1

我正在嘗試使用泛型實現堆棧。接口中的泛型?

下面是我具有其它的組件,

1)接口:

public interface stackInterface<T>{...} 

2)實施:

public class Stack<T> implements stackInterface<T>{...} 

3)客戶端:

​​

我只是想知道我是否是一個做事是正確的做法,還是我錯過了什麼?

+0

我會嘗試使用內置的類。已經有一個Stack,但Deque可能是一個更好的選擇。 –

+1

彼得,儘管存在通常的集合類,但它仍然是瞭解泛型和寫它們的好方法。主要是因爲至少一個天真的收集很容易編寫,因此不會分散太多的注意力。這似乎不像是有人重新發明輪子,因爲他們需要一個堆棧,並且不知道已經有一個堆棧。 – Joey

回答

4

看起來好吧。當然,除了完全錯誤的命名約定之外。

在Java類型名稱中使用首字母大寫。與類相比,接口也沒有專門命名。 Java中常用的方法是命名接口Stack<T>和類ImplementationDetailStack<T>,參見參考資料。和ArrayList<T>LinkedList<T>

(我個人贊成開始界面的名稱與I,雖然,例如IStack爲接口和Stack默認執行.NET約定。)

+1

你最後一段可能只是開始一場無盡的辯論,所以即使提到它也沒有意義。大多數Java開發人員不會使用'I'前綴的原因,它不會增加任何價值。 – maba

+0

Java設計者認爲區分類聲明中的類和接口繼承('extends'和'implements')就足夠了,我傾向於不同意。類和接口*使用*比創建更頻繁。 *使用*能夠一眼就看出你的變量是一種界面類型還是實際的實現在我眼中是安靜的。另外,我經常在編寫'List l = new List '時經常絆倒,但是再次注意到'List'是一個接口,我必須追查一個實現('List'只是一個例子;還有更多晦澀的例子) – Joey

+0

當我調用一個方法,返回一個'List '對我來說就夠了。我不需要知道它是一個接口。我爲什麼要? – maba

2

到目前爲止,一切都很好,除了名稱的所有類型的首字母大寫,不使用單詞界面中的「界面」。接口應該叫Stack和實施...Stack其中...描述基本實現原理,就像在ArrayList

一般來說,我們往往因爲他們似乎無處不在方法簽名和變量類型保留最好的和最短的名字接口,而具體實現類型只出現在實例化的表達。

1

一個好主意可能是看看java.util.List接口的源代碼,它的實現類如java.util.ArrayList正在使用泛型。你可以從那裏學習並應用到你的代碼。

0

一切都很好,除了命名約定。正如Dan所建議的那樣,在List和ArrayList上採取了這樣的措施。最好在接口中只使用接口名稱,並將Impl與接口名稱一起作爲默認實現。

public interface Stack <T> { 

} 

public class StackImpl<T> implements Stack { 

} 

Stack<String> defaultStack=new StackImpl<String>(); 

對於其他實現,最好使用List-ArrayList樣式約定。