簡體   English   中英

命名具有不同返回類型但功能相同的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM