[CLOSED] хочу плохого (generic methods)

kill-still

есть ли возможность получить доступ к генерик классу метода?

<T> T get(String propertyName);

public <T> T getArrayItem(String path, String itemId) {
List<T> list = get(path);
for (T item : list)
if (item instanceof Map && itemId.equals(Map.class.cast(item).get("id")))
return (T) item;
return null;
}

можно ли заменить на что-то вроде

public <T> T getArrayItem(String path, String itemId) {
List<T> list = get(path);
if (Map.isInstance(T))
for (T item : list)
if (itemId.equals(Map.class.cast(item).get("id")))
return (T) item;
return null;
}

katrin2201

Нету. В рантайме есть возможность только получить доступ к параметризациям генерика, если ты от него унаследовался.

kill-still

спасибо.
доступ к параметризациям генерика,

да, это известная фича.

andra1980

Только если явно передать класс как аргумент метода.

public <T> T getArrayItem(String path, String itemId, Class<T> clazz) {
List<T> list = get(path);
if (Map.class.isAssignableFrom(clazz))
for (T item : list)
if (itemId.equals(Map.class.cast(item).get("id")))
return item;
return null;
}

kill-still

там на самом деле так и есть, но немного по-другому:
public <T, U extends T> T getArrayItem(String path, String itemId, Class<U> clazz) {
Оставить комментарий
Имя или ник:
Комментарий: