我来自Python,Ruby和PHP世界,我尝试遵循的一种技术是从代码中删除参数顺序依赖项。这是在Ruby中实现的该技术的简短演示:

class Gear
    attr_reader :chainring, :cog, :wheel
    def initialize(args)
       @chainring = args[:chainring]
       @cog = args[:cog]
       @wheel = args[:wheel]
    end
    ...
end

Gear.new(
   :chainring => 52,
   :cog => 11,
   :wheel => Wheel.new(26, 1.5)).gear_inches

如您所见,客户端代码不需要知道用于初始化Gear实例的参数顺序,我喜欢这样。但是现在我只是想知道如何在静态类型的语言(如Java)中实现相同的东西,我也想知道人们是否尝试使用这种语言来遵循这种技术。如果有人可以分享他们的经验并显示一些演示代码(使用Java,C#等),那就太好了。

最佳答案

如果仅用于创建新对象,则可以使用Object Initializer:

public class Gear
{
    public int Chainring { get; set; }
    public int Cog { get; set; }
    public int Wheel { get; set; }
}

// ...
var gear = new Gear
{
    // could be in any order,
    Cog = 11,
    Chainring = 52,
}

至于方法参数,请查看Named and Optional Arguments上KSid的答案。

10-04 23:39