3

Javaはかなり新しい

次のような方法でメソッドを使用できるようにしたいと思います。

class PairedData {
    String label;
    Object val:
}


public void myMethod(String tablename, PairedData ... pD) {
    /* 
    insert a record into a table -tablename with the various fields being
    populated according to the information provided by the list of 
    PairedData objects
    */
}

myMethod("firststring",{"field1",Date1},{"field2",12},{"field3","aString"});

構文が無効であることに気づきましたが、それが私がやりたいことの要点を与えてくれることを願っています。

私がやろうとしているのは、クラスのインスタンスにデータを入力してからそれらを渡すのではなく、データを直接渡すことです。それは可能ですか、それとも私は多くのOOPルールを破ろうとしているだけですか?

4

4 に答える 4

2

これは、オブジェクトの配列を使用して行うことができます。

public void myMethod(String tableName, Object[] ...pairs)

そして、そのようなスタイルでこのメソッドを呼び出します。

myMethod("someTable", new Object[] {"field1", date1}, new Object[] {"field2", date2});
于 2013-01-05T14:13:35.603 に答える
2

いいえ、あなたがやろうとしていることは本当に不可能です。そのような配列で複雑なことをするよりも、クラスのインスタンスをメソッドに渡す方がはるかに良いように思えます。別の答えは、Object[]varargsパラメーターを使用することを提案しました-これは、例で示しているようなものを達成するためにおそらく最も近いものです。別の選択肢(そして私はより良いものだと思います)は

public void myMethod(String tablename, String[] labels, Object[] vals) {

それぞれのクラスをインスタンス化し、それらの配列で(それらをペアリングして)インスタンス化できlabels[i]ますvals[i]。言い換えれば、あなたのメソッドでは、次のようなものを持つことができます

pD = new PairedData[labels.length];

for (i = 0; i < labels.length; i++)
    pD[i] = new PairedData(labels[i], vals[i]);  // assuming you
                                                 // added this
                                                 // constructor

含めたメソッド呼び出しの例は、次のように変換されます。

myMethod("firststring", new String[]{"field1", "field2", "field3"}, 
                                             new Object[]{date1, 12, "aString"});
于 2013-01-05T14:22:52.520 に答える
1

いつもの...

すべてのパラメーターに対して変数を含むクラスを作成します。次に、そのクラスのインスタンスを作成し、値を入力します。

次に、そのクラスインスタンスを使用してそれらを渡すことができます。

全体が必要な場合は...コレクション(マップ、ハッシュマップ、リストなど)を作成し、それを渡します。

于 2013-01-05T14:13:50.790 に答える
0

あなたが私に尋ねれば、将来の言語拡張のための良いケースのようです。しかし、メソッドの呼び出し方法を少し変更することで、近づけることができるはずです...

myMethod("someTable", 
  new PairedData("field1", date1), 
  new PairedData("field2", date2)
);

よりタイプワークですが、タイプセーフであり、ペアが一致するエラーが発生しにくいため、おそらく最も安全です。

また、「PairedData(String label、Object val)」のコンストラクターを作成する必要があります。これについてはval、格納する予定のタイプごとに1つずつ、複数のオーバーロードされたバージョンを作成することをお勧めします。

于 2017-10-02T03:45:56.037 に答える