![](/img/trans.png)
[英]Naming Convention for methods that return different types with similiar parameters
[英]naming methods with different return types but the same functionality
我在談論Java,但這個概念適用於其他語言 -
我們在同一個類上有兩個方法,它們具有相同的基本功能,但提供不同的返回類型。 這兩種方法都可以獲得所有的東西,但是一個可以獲得可以訪問所有東西的迭代,一個獲得包含所有東西的集合。
我們知道你不能這樣做(因為它不會編譯):
Iterable getThings()
Collection getThings()
那么,有沒有人想過如何命名方法? 這似乎很容易解決:
Iterable getIterableOfThings
Collection getCollectionOfThings
然而,這顯然有點冗長,也許不是最好的解決方案。 我問的問題是否意味着我們的組織/編碼方法不合時宜,或者這是一個有效的問題?
還有其他人處理過這種情況嗎?
怎么樣:
Iterable getIterator();
Collection getThings();
Iterable是Collection的超級接口。 一般來說,你不應該這樣做。
盡管如此,這個問題本身也是有效的。 一個更好的例子是,當你有一個底層資源,一個函數將它包裝在一個訪問對象中,第二個函數包裝在另一個訪問對象中。 當然,這取決於編碼風格,但我習慣於看到這樣的東西(從而發現它更具可讀性):
class A {
private Object[] underlying;
List<Object> getItemsAsList() {
return Arrays.asList(underlying);
}
Object[] getItemsAsArray() {
return underlying;
}
}
Iterable getThings()似乎不正確,因為你實際上沒有得到任何東西。 Iterable提供對一組項目進行迭代的訪問,但不會為您提供這些項目。
一個集合將為您提供這些項目,因此Collection getThings()似乎是正確的。
例如,您可以為無限長的集合提供迭代器,但不能給出這樣的等效集合。 這可以工作,因為迭代器會在時間返回一個元素,但是集合需要收集無限量的對象並返回它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.