java - 在一个变量中引用方法的参数

标签 java methods parameters reference

我有一个方法

public void create(String x, String y, String z, Calendar a, Calendar b, Calendar c, List<String> d){
    object.create(x, y, z, a, b, c, d);
}

它通过一些管理类传递。有没有一种方法可以避免我在 object.create 调用中显式键入参数,而是允许我简单地引用方法自己的参数?

我问这个问题的原因是因为我有几个这样的方法,而且看起来很困惑。

请注意,参数具有不同的类型,并且它们仍应如此定义,而不是Object...args

最佳答案

这里通常的答案是创建一个具有这些属性的新类,并传递该类的实例(有点像消息信封)而不是一堆离散的参数。

例如:

public void create(MyNiftyThing thing){
    object.create(thing);
}

...其中 MyNiftyThing 类是:

class MyNiftyThing {

    private String x;
    private String y;
    private String z;
    private Calendar a;
    private Calendar b;
    private Calendar c;
    private List<String> d;

    public MyNiftyThing(String x, String y, String z, Calendar a, Calendar b, Calendar c, List<String> d) {
        // ...init data members here...
    }

    // ...accessors for the data members here...
}

您可以通过只使用 getter 而不使用 setter 来保持它的不可变性。有时,如果它纯粹一个方便的数据结构,您可能会使用 publics 作为实例成员,但任何像样的 IDE 都可以为您自动生成访问器(如果您使用publics,你会因为不变性而陷入 final )。

当然,如果您可以提供合理的默认值,您不必必须接受构造函数中的所有内容(或者您可以有多个构造函数)。

它可能不适用于这种特定情况,但例如,MyNiftyThing 可以通过让构造函数接受最小参数(可能没有),然后是一系列 buildNNN 来成为自己的构建器 方法设置其相关数据成员并返回 this 进行链接。这有助于避免迷失在构造函数签名中(“是xyz还是xzy...?”)。 :-) 这样做的缺点是你基本上失去了不变性。

关于java - 在一个变量中引用方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345727/

相关文章:

javascript - PageDown 通过 ScriptEngine 错误解析 Markdown

java - 将 void 方法的内容保存到变量

Python,我的对象声称无法访问方法

c++ - 使用 C++ 类处理常用参数

c# - 将变量传递给 SSIS 中的项目参数

java - 如何在 httpclient 4.3+ 中更新 HttpClient 的设置?

java - 带有 AMQP 和 RabbitMQ 的 Spring,带有可选 x-dead-letter-exchange 的队列

Java心跳框架

python - 我如何记住 list.append 和 list.extend 中的哪一个是 Python 中的哪一个?

java - 如何将枚举作为泛型参数传递