我有一个Object类型的ArrayList,它包含6个不同类的对象:
questions = new ArrayList<>();
questions.add(new Question1());
questions.add(new Question2());
questions.add(new Question3());
questions.add(new Question4());
questions.add(new Question5());
根据questionNum变量,我必须得到对象的方法,即来自ArrayList的isAnswered()。
我想要的例子:
for (int i = 0; i < 5; i++)
{
questionNum = i;
if ((Question<questionNum>)questions.get(questionNum).isAnswered())
{
Log.d("Answered", String.valueOf(questionNum));
}
}
我现在正在使用的是:
else if (questionNum == 4 &&
((Question5)questions.get(questionNum)).isAnswered())
任何方式使它更优雅,或者我应该使用接口或继承(做Android项目,所以每个问题类已经继承了Fragment)?
答案 0 :(得分:1)
您可以让每个Question类实现interface:
public interface Question{
public boolean isAnswered();
}
public class Question1 implements Question{
public boolean isAnswered(){
//implementation
}
//other code
}
然后将这些问题添加到列表中
List<Question> questions = new ArrayList<Question>();
questions.add(new Question1());
然后您可以从列表中获取问题并调用适当的方法:
if ( questions.get(0).isAnswered() ){
}
答案 1 :(得分:0)
我在这里看到三个解决方案:
A。在ArrayList上添加一个类型转换程序以及每个问题,如下所示:
questions = new ArrayList<>();
questions.add(new ArrayList<>(Arrays.asList(new Question1(), "Question1")));
questions.add(new ArrayList<>(Arrays.asList(new Question2(), "Question2")));
然后有一个switch
语句,具体取决于第二个类型参数和类型转换(字面意思)根据需要
B。让每个Question*
类都有一个属性type
,然后使用switch
语句(如前所述)进行相应的类型转换,即:
class Question1
{
public String type = "Question1";
// ...
}
// ...
C。让所有Question*
类继承自公共Question
超类,或根据需要实现通用接口,即:
class Question
{
public String type = "Question";
public Boolean isAnswered()
{
return false;
}
// ...
}
class Question1 extends Question
{
public String type = "Question1";
public Boolean isAnswered()
{
// ..
}
// ...
}
// ..