Здравствуйте. Иногда возникает необходимость проверить, является ли объект представителем некоторого дженерик-класса, параметризованным конкретным типов. Пока обычно не делаю такую проверку, проверяю только, что объект является представителем самого дженерик-класса. Но дженерик-класс же может быть параметризован в каждом конкретном случае каким-то своим типом. Если типы не будет совпадать, то я получу ошибку. Как проверить, что типы совпадают?
Пример кода:
public abstract class BaseComboBox<T> extends JComboBox<ComboboxItem<T>> {
//некоторый код
@Override
public ComboboxItem<T> getSelectedItem() {
Object selectedItem = super.getSelectedItem();
if (selectedItem == null)
return null;
else {
if (selectedItem.getClass() == ComboboxItem.class) { // (1)
return (ComboboxItem<T>) selectedItem; // (2)
} else {
return null;
}
}
}
//некоторый код
}
public class ComboboxItem<T> {
private String caption;
private T value;
public ComboboxItem(String caption, T value) {
this.caption = caption;
this.value = value;
}
@Override
public String toString() {
return caption;
}
public String getCaption() {
return caption;
}
public T getValue() {
return value;
}
}
В данном примере в строчке (1) я просто проверяю, что совпадают классы, но не проверяю, что совпадает тип в угловых скобках. В (2) делаю кастинг, и здесь может быть ошибка, если типы разные. (Хотя в данном случае, типы всегда будут совпадать, в других местах подобный код может вызвать эксепшн)