Следующий подход проблематичен:
> public Class<List<String>> getModelType() {
> return (Class<List<String>>) new ArrayList<String>().getClass();
> }
например. если вы хотите проверить, говорит ли объект типа
org.eclipse.emf.common.util.BasicEList<String>
относится к типу
List<String>
на основе результата вышеупомянутого подхода getModelType (), например:
BasicEList<String> fromObject = ...;
if (getModelType().isAssignableFrom(fromObject.getClass())) {
transferFromModelToUi(getModelType().cast(fromObject));
}
это приведет к значению false, тогда как должно быть истиной, поскольку оба объекта реализуют интерфейс List (поскольку getModelType () возвращает объект Class типа List, а не ArrayList).
Вот подход, который работал для меня (немного громоздкий, но приводит к правильным результатам в примере выше, может быть перемещен в статический инициализатор):
public Class<List<String>> getModelType() {
Class<?> arrayListClass = new ArrayList<String>().getClass();
Class<?>[] interfaces = arrayListClass.getInterfaces();
int index = 0;
for (int i = 0; i < interfaces.length; i++) {
if (interfaces[i].equals(List.class)) {
index = i;
break;
}
}
return (Class<List<String>>) interfaces[index];
}