Получить универсальный тип класса во время выполнения - PullRequest
442 голосов
/ 04 августа 2010

Как мне этого добиться?

public class GenericClass<T>
{
    public Type getMyType()
    {
        //How do I return the type of T?
    }
}

Все, что я пробовал до сих пор, всегда возвращает тип Object, а не конкретный используемый тип.

Ответы [ 23 ]

0 голосов
/ 27 сентября 2018
public static final Class<?> getGenericArgument(final Class<?> clazz)
{
    return (Class<?>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
}
0 голосов
/ 26 октября 2018

Это может быть полезно для кого-то. Вы можете использовать java.lang.ref.WeakReference; таким образом:

class SomeClass<N>{
  WeakReference<N> variableToGetTypeFrom;

  N getType(){
    return variableToGetTypeFrom.get();
  }
}
0 голосов
/ 01 декабря 2016

Я обнаружил, что это простое и понятное решение

public class GenericClass<T> {

    private Class classForT(T...t) {
        return t.getClass().getComponentType();
    }

    public static void main(String[] args) {
        GenericClass<String> g = new GenericClass<String>();

        System.out.println(g.classForT());
        System.out.println(String.class);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...