[英]Why there is no getFirst(iterable) method?
Iterables為getLast
提供了兩種方法
public static <T> T getLast(Iterable<T> iterable);
public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue);
但只有一個用於getFirst
public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue);
是否存在破壞對稱性的設計/實施原因?
我認為關鍵是沒有理由得到getFirst(iterable)
,因為這可以通過iterable.iterator().next()
。 Guava做了一個很好的嘗試,以保持API小,因此不添加可以/應該以另一種方式輕松完成的事情。
另一方面,還沒有一種機制來測試iterable是否為空,如果是,則返回默認值而不是第一個值。 因此, getFirst(iterable, default)
。
此外,沒有一種簡單的方法來獲取最后一個元素,因此getLast(iterable)
和getLast(iterable, default)
作為@ JohnB答案的補充,我想展示Guava關於getFirst(iterable)
的開發者意見 。 Kevin Bourrillion(負責人Guava的開發)在那里寫道:
iterable.iterator()。next()非常清晰,可讀且明確 。 我確切地知道它的作用,而使用Iterators.getFirst(),我必須跑掉並查看該庫設計師如何決定這樣做。
而且,你的一致性概念是非常錯誤的。 我們在如何呈現重要功能時使用一致性,但我們從不使用它來證明添加無用的功能,並且您也不應該在自己的庫中!
所以,你有一個選擇:
iterable.iterator().next()
, Iterables.getFirst(Iterable<T> iterable, T default)
, Iterables.get(Iterable<T>, 0)
, iterable.iterator().next()
和一些文檔)並將其用作Iterables2.getFirst(iterable)
, PS:前段時間我有類似的疑問,當時發現了這個問題的確切復制品 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.