5

既に情報が含まれている ArrayList(preferred) または配列を使用して、スーパークラスのコンストラクターを呼び出そうとしています。私の構文上の間違いが何であるか、またはそれができるかどうかわかりませんか?

具体的には、どちらかのオブジェクトに「true」と「false」を挿入したいと考えています。あの二人だけ。

public class TrueFalseQuestion extends MultipleChoiceQuestion
{
    Answer myAnswer;
    StringPrompt myPrompt;

    //I can create, but not initialize data up here, correct?
    //Tried creating an ArrayList, but cannot insert the strings before calling constructor

    public TrueFalseQuestion()
    {
        /* Want to call parent constructor with "true" and "false" in array or ArrayList already*/
        super(new String["true", "false"]);
        ...
    }

私はこれがfacepalm-erだと感じていますが、それを理解することはできません. 私はさまざまな方法を試しましたが、問題は、スーパーコンストラクターを最初に呼び出す必要があるため、データを初期化する機会が与えられないことです。

4

4 に答える 4

8

次の形式を使用します。

super(new String[] {"true", "false"});

MultipleChoiceQuestion次のようなコンストラクタが含まれている場合:

MultipleChoiceQuestion(String[] questionArray)

あなたが言うように、引数を持つオーバーロードされたコンストラクターが含まれている場合List、たとえば:

MultipleChoiceQuestion(List<String> questionList)

その後、次を使用できます。

super(Arrays.asList("true", "false"));

または、使用するための要件が​​ある場合ArrayList:

super(new ArrayList<String>(Arrays.asList(new String[] { "true", "false" })));
于 2012-11-11T21:10:00.913 に答える
4

MultipleChoiceQuestion クラスを制御できる場合は、代わりにコンストラクターを次のように変更できます。

public MultipleChoiceQuestion(String ... values) {}

次に、次のように呼び出すことができます。

public TrueFalseQuestion() {
    super("true", "false");
}

以前に聞いたことがない場合、これは varargs と呼ばれます。ここでそれについて読むことができます: http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

于 2012-11-11T21:17:49.537 に答える
3
super(new String[]{"true", "false"});
于 2012-11-11T21:09:59.197 に答える
2

a List(具体的には a ではないArrayList) の場合、これを行うことができます。

super(Arrays.asList("true", "false"));

特に が必要な場合はArraylist<String>、次のようにする必要があります。

super(new ArrayList<String>(Arrays.asList(new String[]{"true", "false"})));
于 2012-11-11T21:15:39.517 に答える