2011-09-06 32 views
2

如果我有一個方法是返回一個TreeSet的整數,我應該如何聲明它?我的方法頭文件應該具體說明它的返回類型?

選項A

public Collection returnSortedIntegers() 

選項B

public Set returnSortedIntegers() 

選項C

public Set<Integer> returnSortedIntegers() 

選擇d

public TreeSet<Integer> returnSortedIntegers() 

我想問的原因是因爲我得到了-Xlint:unchecked消息時,我編在一個使用這種方法的是方法的類。當它看起來像選項A時,我沒有任何問題編譯它,它只是當我編譯不同的類使用我得到xlint消息的方法,這就是爲什麼我已將其更改爲選項C,並且消息已消失。


謝謝你的答案,它會出現,這是贏得

選項Ë

public SortedSet<Integer> returnSortedIntegers() 

我此刻學習Java的所以它是相當新的給我,我沒有意識到SortedSet接口,我只知道TreeSet是Set的一個子類。正如Stack Overflow總是啓發我一樣。

回答

3

選擇E:

public SortedSet<Integer> returnSortedIntegers() 

這是給調用者,他們需要了解什麼是返回,同時仍然有用的最少信息:

  • 這是一個Set
  • 它包含Integer
  • 它是排序
3

我會選擇選項C

我的經驗法則是我的參數/返回的對象總是使用接口。這樣,你就可以獲得更多的多態性。

使用泛型總是一個好主意,因爲它向您的方法的用戶傳達了Set包含整數。泛型之前,我們必須知道的實施,找出什麼樣的對象儲存:-(

+0

+1將集合的類型(TreeSet <>)留給實現。 –

+0

但是,然後集合排序的事實並不明顯。 –

+0

@Kublai你有一個好點。我在他的問題中選擇了最好的選擇;-)但的確,我可能會指定SortedSet。 – Cygnusx1

7

我會

Set<Integer> returnSortedIntegers() 

或去:

SortedSet<Integer> returnSortedIntegers() 

如果呼叫者需要直接訪問與集合排序相關的方法

我的規則應儘可能通用,同時保持類型安全。

1

最常用的方法是返回相應接口的通用版本。

所以在你的情況下,它很可能是C
或者其他建議,

public SortedSet<Integer> returnSortedIntegers() 

,因爲它是一個有序集合。

取決於你的方法的目的是進行雖然,也可能是

public Collection<Integer> returnSortedIntegers() 

因爲你還沒有明確界定它是否應該有一整套的屬性。

這就是說,有些情況下,最明確的情況(D)也是正確的,假設您希望方法的用戶知道它是並始終是TreeSet。這將假定這個數據結構的特定屬性總是需要的,因此沒有其他返回類型是合適的。

相關問題