2

Java varargs をオプションのパラメーターとして使用することは、適切なプログラミング イディオムと見なされますか?

さらに: インターフェイスがあり、一部の実装では追加のパラメーターが必要であり、一部の実装では不要な場合、オプションのパラメーターのメソッド シグネチャで varargs を使用しても問題ありませんか?

Java では、次のイディオムを使用できます。

public static void x(String ... strings)

おそらく空の文字列の配列を取得します。あなたはそれを呼び出すことができます

x() (empty array), x("1","2","3") etc
4

3 に答える 3

2

いいえと思います。varargs を使用すると、オプションのパラメーターに任意の数の引数を指定できます。インターフェイスを実装したり、メソッドを呼び出したりする人々に、1 つの値のみが必要であることをどのように伝えますか? 複数の値が指定された場合の動作はどうあるべきですか? これらは不要な合併症です。

メソッドでオプションの引数に正確に 0 または 1 の値が必要な場合は、0 または 1 の値のみを指定できる言語構造を使用する必要があります。メソッド シグネチャをオーバーロードするか、オプションのパラメーターを null にできるようにする方が適切です。

于 2012-04-23T18:33:12.317 に答える
2

Varargs は通常、API のユーザーが渡したい「特定の型」の引数の数がわからない場合に使用されます。ユーザーは任意の数のパラメーターを渡すか、まったく渡さないかを決定できるため、問題はないと思います。例えば

public class NewClass {

    public void print(String... a) {
        System.out.println(a);
    }

    public static void main(String[] args) {
        new NewClass().print();
    }
}

傷つけないで。あなたは可変引数の型を知っているので。

于 2012-04-23T18:01:58.977 に答える
0

オプションのパラメーターを実装するために varargs を使用するのは良い考えではないと思います。

Animal a = new Dog();
a.speak("bow");

上記の例の参照を見ても、動物のリストなどから動物が抽出された場合、それが犬であることがわからない可能性があるため、どの引数を適用する必要があるかわかりません。

@Oli で述べ​​たように、明示的なオーバーロードは代わりに良いアプローチです。

于 2012-04-23T17:59:55.150 に答える