我有一个关于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));
}
}
}
我想知道是否有一些帮助:
希望这很容易阅读。
非常感谢!
答案 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)
是的,您正在使用instanceof
而不是每次都提出一个新问题,为什么不直接替换它:
fiveQuestions().add(new QuestionType2(i, null, null, 1));
使用:
fiveQuestions().add(random);
如果你真的想创建新的问题,你必须告诉我们问题构造函数是什么让我们告诉你用nulls
代替什么。
答案 3 :(得分:0)
是的,您正确使用了instanceof
。
要摆脱构造函数中的空值,您可以创建仅包含必要参数的新构造函数,或者考虑使用Builder模式(但是,对于此类任务而言,它可能过于复杂)。