У меня есть метод generi c, который должен искать класс определенного типа c. Мне удается получить этот класс как Class<?>
, теперь я хочу проверить, действительно ли он имеет запрошенный тип, и если да, вернуть его (иначе ноль). Единственный код, который, похоже, сработал, - это просто попробовать приведение и сгенерировать исключение, если оно не удалось. Однако меня беспокоит производительность этого кода, поскольку он будет использоваться очень часто, и я слышал, что генерирование исключений не очень производительно.
public static <T> Class<T> getThatClass() {
Class<?> clazz = // some internal lookup
try {
return (Class<T>) clazz;
} catch (ClassCastException e) {
return null;
}
}
Есть ли способ проверить, имеет ли значение clazz
типа E
без исключений? Я хотел бы что-то вроде этого, но, к сожалению, это не компилируется:
public static <T> Class<T> getThatClass2() {
Class<?> clazz = // some internal lookup
if (clazz instanceof Class<T>) {
return (Class<T>) clazz;
} else {
return null;
}
}