Если вы можете гарантировать, что эти типы являются единственными, которые существуют, и что не существует других подклассов, вы можете создать отображение со следующей сигнатурой:
Map<Class<? extends QuestionTypeInfo>, QuestionType> mapping;
А затем установите сопоставления. Например. как это:
mapping.put(MatrixSinglePerRowQuestionTypeInfo.class, QuestionType.MATRIX_SINGLE_PER_ROW);
Тогда вы можете сделать простой поиск, подобный этому:
return mapping.get(questionTypeInfo.getClass());
Хотя это работает только тогда, когда, например, MatrixSinglePerRowQuestionTypeInfo
- это класс без дополнительного подкласса. Поскольку Map
использует метод equals
внутри, чтобы проверить, существует ли данный ключ. Посмотрите на этот упрощенный пример, который нарушил бы мою предложенную логику ( Но будет работать с вашей существующей логикой !! ):
// create a subclass
class SomeSubClass extends MatrixSinglePerRowQuestionTypeInfo { ... }
// initialize the mapping
mapping.put(MatrixSinglePerRowQuestionTypeInfo.class, Foo.BAR);
// in your lookup
mapping.get(MatrixSinglePerRowQuestionTypeInfo.class); // returns Foo.BAR as expected
mapping.get(SomeSubClass.class); // returns null??