java - 如何在 Java 或 C# 等静态类型语言中避免参数顺序依赖

标签 java c#

我来自 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# 等),那就太好了。

最佳答案

您不必遵守 C# 中的参数顺序。如果您知道参数名称,您可以利用 named and optional arguments通过使用参数名称、冒号和您的值。

    static void Main(string[] args)
    {
        var variable1 = "1";
        var variable2= 90056;
        var variable3 = 'u';

        // random order
        TestMethod(arg3: variable3, arg1: variable1, arg2: variable2);

        // you can even omit some argument
        TestMethod(arg2: variable2);
    }

    private static void TestMethod(string arg1 = null, int arg2 = 0, char arg3 = '\0')
    {
        Console.WriteLine(arg1);
        Console.WriteLine(arg2);
        Console.WriteLine(arg3);

        Console.ReadKey();
    }

我相信 Xiaoy312 的答案就是你要找的,但我会把它留在这里,以防以后有人对此感到好奇。

关于java - 如何在 Java 或 C# 等静态类型语言中避免参数顺序依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201178/

相关文章:

java - 如果所有这 3 个类都遵循 SOLID 概念

java - 是否需要在每个操作系统上安装JVM才能运行java软件或java编译文件。?

c# - 是否可以将固定字节数组转换为结构,以便在 C# 中进行双向更改?

c# - 我可以从内存中的实例生成代码以便稍后重新创建它吗?

c# - 解析以分号分隔的列表

java - 如何使用 Java 将 bufferedImage 附加/粘贴到 Word 或 RTF 文档中?

java.lang.VerifyError : Verifier rejected class. 代码在 Debug模式下工作正常,但在 Release模式下不会抛出此错误

c# - 优雅地停止 .net 启动的 Java 进程

c# - 基类不能修改的类的基类方法?

c# - 使用模拟进行单元测试。测试行为而不是执行