实例 - 从先前的ArrayList向新的ArrayList添加新对象

时间:2014-07-28 12:31:39

标签: java object arraylist types instanceof

我有一个关于instanceof运算符的问题以及如何正确使用它们来解决我的问题。

我目前有一个类型问题的ArrayList,它有两种类型存储' QuestionType1' ' QuestionType2&#39 ; 即可。存储 20 问题对象,我需要从此列表中随机生成 5 并将其存储在新位置。

我已经创建了一个随机生成5个问题的方法,但我已经陷入了如何将它们添加到'问题' 类型的新ArrayList中的问题。

我使用instanceof运算符来检查返回的问题是否与某个类型匹配,然后我将它们添加到新的ArrayList中。 (见下面的代码块)。

    public static void chooseQuestions() {
    Random randomiser = new Random();
    Collections.shuffle(questions);

    for(int i = 0; i < 5; i ++) {
        Question random = questions.get(randomiser.nextInt(questions.size()));
        System.out.println(random);

        if(random instanceof QuestionType1) {

            fiveQuestions().add(new QuestionType1(i, null, null, null, null, null, null, i) );

        } else if (random instanceof QuestionType2) {

            fiveQuestions().add(new QuestionType2(i, null, null, 1));
        }
    }

}

我想知道是否有一些帮助:

  • 我正确使用了instanceof
  • 用两个&#39; fiveQuestions()替换空占位符的内容.add(new ...&#39;

希望这很容易阅读。

非常感谢!

4 个答案:

答案 0 :(得分:1)

简单地说:

for(int i = 0; i < 5; i ++) {
    Question random = questions.get(randomiser.nextInt(questions.size()));
    fiveQuestions().add(random);
}

答案 1 :(得分:0)

问题应该有类型(如QuestionType),它本身不应该是Question。它是HAS-A,而不是IS-A。

如果你这样做,你只需添加Question而不用instanceof检查它的实际类型,你就不必复制问题了。这也将解决fiveQuestions().add(....)部分中的空零部分。

答案 2 :(得分:0)

  1. 是的,您正在使用instanceof

  2. 而不是每次都提出一个新问题,为什么不直接替换它:

    fiveQuestions().add(new QuestionType2(i, null, null, 1));
    

    使用:

    fiveQuestions().add(random);
    
  3. 如果你真的想创建新的问题,你必须告诉我们问题构造函数是什么让我们告诉你用nulls代替什么。

答案 3 :(得分:0)

是的,您正确使用了instanceof

要摆脱构造函数中的空值,您可以创建仅包含必要参数的新构造函数,或者考虑使用Builder模式(但是,对于此类任务而言,它可能过于复杂)。