java - 我如何使用泛型为我的方法使用变量返回值?

标签 java xml class generics

我有一个带有“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/

相关文章:

java - 在没有编译错误的情况下更改对方法的访问

java - 如何在 Android 应用程序中显示源和目的地的路径并在应用程序中导航用户

C++ 类 - 我的程序有什么问题?

Java ArrayList 避免 IndexOutOfBoundsException

java - 实现 Java gui slider 时出现运行时错误

c++ - 如何在 C++ 中解析 XML 文档

c# - 使用 Dapper 从 T-SQL 存储过程返回 XML 字符串

ios - 是否有 "Size Classes"的纯代码版本?

c++ - 指针:这行代码是什么意思?

java - 为什么从 Java 列表中删除基本类型时没有自动装箱?