В настоящее время я пытаюсь реорганизовать часть своего кода и наткнулся на функцию, которую я раньше не использовал в Java, связанной с Generics.Использование обобщений для возврата более одного типа
Я пытаюсь вернуть ArrayList<?>
определенного типа на основе параметра, переданного в метод. Параметр принимает перечисление, которое определяет требуемый тип ArrayList<T>
Чтобы вернуться, что-то вроде этого, но я получаю ошибки от метода прототипа:
// Retrieves an ArrayList of questions available for a particular QuestionType
public <T extends Question> ArrayList<T extends Question> getQuestions(QuestionType type) {
switch (type) {
case BASE_QUESTION:
return mQuestions; // ArrayList<Question>
case MULTIPLE_ANSWER_QUESTION:
case MULTIPLE_CHOICE_QUESTION:
case TRUE_FALSE_QUESTION:
return mMultipleAnswerQuestions; // ArrayList<MultipleAnswerQuestion>
case MATCHING_QUESTION:
return mMatchingQuestions; // ArrayList<MatchingQuestion>
case BLANK_QUESTION:
return mBlankQuestions; // ArrayList<BlankQuestion>
default:
// TODO Perfect place to throw an exception
Log.d(TAG, "Exception: Provided a non-existant QuestionType");
}
}
Дополнительная информация: Этот метод существует в пределах пользовательского объекта, который содержит несколько ArrayList of Questions, организованный по типу. Этот метод не существует в классе SuperClass типа Question.
// CLASS HIERARCHY
// SuperClass
Question
// SubClasses of Question
MultipleAnswerQuestion
MultipleChoiceQuestion
TrueFalseQuestion
MatchingQuestion
BlankQuestion
Может кто-нибудь объяснить мне, как прототип метода, который достигает этой задачи?
Спасибо за понимание и помощь.
Вам не нужно указывать 'extends Question' еще раз в возвращаемом типе. Вы уже указали это. Кроме того, в этом случае кажется, что шаблон может быть лучше, потому что вы не используете 'T' – awksp
Не могли бы вы дать ответ, демонстрирующий этот подход? – Matt
Какая ошибка вы получаете? – shmosel