我来自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的答案。