java - 动态转换为对象 ArrayList 中未知的类

标签 java android arraylist casting

我有一个 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())

有什么方法可以让它更优雅,还是应该使用接口(interface)或继承(做Android项目,所以每个问题类都已经继承了Fragment)?

最佳答案

您可以让每个 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() ){

}

关于java - 动态转换为对象 ArrayList 中未知的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930581/

相关文章:

java - 累积列表中重复元素的值

Java ArrayList 添加超出当前大小的项目

java - 无法将 result.getContents() 中的文本值传递到 myRef DatabaseReference 中以删除相应的键

java - 如何在不显示java中的值的情况下为每一行设置一个值

java - Android - 使用应用的 PorterDuffColorFilter 压缩位图

java - 使用 exp4j 并得到一个奇怪的结果

android - 如何在一次查询中获取多个 child 的 ID

java - 对象的数组列表只是创建对同一对象java的引用

java - 将数据传递到添加的 fragment - IlligalStateException : Fragment already active

Java : JDBC Connection Issue When Click On Button