我有一个带有“parseXML”方法的匿名类 XMLHandler。此方法负责解析 XML。 XML 是测验问题的来源。对于不同的测验,我有不同类型的 XML。 parseXML() 提供了一个包含特定问题的 ArrayList。问题是带有用于问题、答案等的字符串的对象。由于测验不同,我有几个问题类(class)。我想要的是对每个 XML 使用此 parseXML。您在下面看到的是我目前的状态。但是在线
currentQuestion = new ...
我需要这样的东西:
currentQuestion = new T;
但这行不通。那么,我能做什么呢?
XMLHandler xmlHandler = new XMLHandler(activity.getApplicationContext(), "source_quiz.xml"){
@Override
public <T> ArrayList<T> parseXML() throws XmlPullParserException, IOException {
ArrayList<T> questions = null;
int eventType = parser.getEventType();
T currentQuestion = null;
while(eventType != XmlPullParser.END_DOCUMENT){
String name = null;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
questions = new ArrayList<T>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if(name.equals("question")){
currentQuestion = new ...// new QuizQuestion();
} else if(currentQuestion != null){
if(name.equals("q")) {
currentQuestion.setQuestion(parser.nextText());
} else if(name.equals("a")){
currentQuestion.addAnswer(parser.nextText());
} else if(name.equals("c")){
currentQuestion.setCategory(parser.nextText());
} else if(name.equals("p")){
currentQuestion.setPage(parser.nextText());
} else if(name.equals("u")){
currentQuestion.setUnit(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if(name.equalsIgnoreCase("question") && currentQuestion != null){
questions.add(currentQuestion);
}
break;
}
eventType = parser.next();
}
return questions;
}
};
最佳答案
这是不允许的。作为解决方法,您可以这样做
public <T> ArrayList<T> parseXML(Class<T> cls) throws ...
...
T currentQuestion = cls.newInstance();
...
关于java - 我如何使用泛型为我的方法使用变量返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645291/