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

时间:2014-06-19 15:41:31

标签: java

我在谈论Java,但这个概念适用于其他语言 -

我们在同一个类上有两个方法具有相同的基本功能,但提供不同的返回类型。这两种方法都可以获得所有的东西,但是一个可以获得可以访问所有东西的迭代,一个获得包含所有东西的集合。

我们知道你不能这样做(因为它不会编译):

Iterable getThings()

Collection getThings() 

那么,有没有人想过如何命名方法?这似乎很容易解决:

Iterable getIterableOfThings

Collection getCollectionOfThings

然而,这显然有点冗长,也许不是最好的解决方案。我问的问题是否暗示我们的组织/编码方法不合时宜,或者这是一个有效的问题?

还有其他人处理过这种情况吗?

3 个答案:

答案 0 :(得分:2)

怎么样:

Iterable getIterator();
Collection getThings();

答案 1 :(得分:1)

Iterable is a superinterface of Collection.一般来说,不应该需要这样做。

尽管如此,这个问题本身也是有效的。一个更好的例子是,当你有一个底层资源,一个函数将它包装在一个访问对象中,第二个函数包装在另一个访问对象中。当然,这取决于编码风格,但我习惯于看到这样的东西(从而发现它更具可读性):

class A {
    private Object[] underlying;
    List<Object> getItemsAsList() {
        return Arrays.asList(underlying);
    }
    Object[] getItemsAsArray() {
        return underlying;
    }
}

答案 2 :(得分:0)

Iterable getThings()似乎不正确,因为你实际上没有得到任何东西。 Iterable提供对一组项目进行迭代的访问,但不会为您提供这些项目。

一个集合会给你那些项目,所以Collection getThings()似乎是正确的。

例如,您可以为无限长的集合赋予迭代器,但不能给出这样的等效集合。这可以工作,因为迭代器会在时间返回一个元素,但是集合需要收集无限量的对象并返回它们。