代码之家  ›  专栏  ›  技术社区  ›  SDReyes

返回类型的具体类型或接口?

  •  6
  • SDReyes  · 技术社区  · 15 年前

    对于方法的返回类型,最好的选择是什么:具体类型还是接口?

    在大多数情况下,我倾向于使用具体类型作为方法的返回类型。因为我相信一个具体的类型对于进一步的使用更加灵活,并且暴露出更多的功能。

    天使般的一个:一个具体的类型本身包含了你最初要返回的接口和额外的功能。

    你的拇指法则是什么?


    奖金 :这是我的意思的一个例子 ReadOnlyCollection or IEnumerable for exposing member collections?

    3 回复  |  直到 7 年前
        1
  •  7
  •   Bert F    15 年前

    我的经验法则:

    1) 最初,我让方法返回接口类型,因为如果需要的话,它总是很容易在以后将其更改为具体类型。从另一个方向回去更难。


    InterfaceType i = xyz.methodThatReturnsConcreteType(); .

    3) 我是否拥有调用代码也会有所不同(内部API与公共API):

    • 如果我拥有调用相关方法的代码(即内部API),那么我就越愿意返回具体类型。
    • 如果我不控制调用此方法的代码(例如public API),那么我就越有可能返回接口类型。 返回具体类型是一种承诺,一般来说,我承诺的越少,就越容易。

    • 使用接口测试可能更容易,因为我可以使用实现接口的模拟对象。
    • proxy object (现在我真的在找借口)

    总之,

    • 我通常 返回接口类型 因为我觉得松散耦合的好处超过了完全访问混凝土类型的便利。
    • 不过,我并不反对改用 当方便性大于松耦合的好处时,根据具体情况。
        2
  •  8
  •   Dominik    15 年前

    经验法则,在返回类型中,尽可能具体,在参数类型中,尽可能不具体。也更喜欢接口,因为如果需要的话,您可以稍后交换实现,而不必更改API的客户机。

        3
  •  1
  •   Jeremy B.    15 年前

    有趣的问题。我相信你必须扪心自问,返回的数据如何使用。用旧车比喻如果你有

    public AccelerationResponse PressAccelerator(float force) {}
    

    您可能希望返回接口而不是类。根据某些情况,你可能会对这种反应有不同的解释。