Есть ли способ найти тип шаблона (общий) в Java?

Я пытаюсь сделать что-то подобное в Java:

public static <T> T foo() {
  return (T) bar(T);
}

public static Object bar(Class<?> klaz) {
  return klaz.newInstance();
}

Но код не компилируется, так как я не могу подставить T для класса <? > .
С конкретным классом я могу вызвать bar как:

bar(ConcreteClass.class);

Но то же самое не работает для T. то есть нет такой вещи, как T.class

В С#, typeof работает как для конкретных типов, так и для типов шаблонов. Таким образом, вызов в бар был бы:

bar(typeof(T));

Но я не смог найти ничего подобного на Java.

Я что-то упускаю, или у Java нет способа получить тип параметра шаблона? И если у Java нет объекта, есть ли какие-либо обходные пути?

Ответ 1

Нет способа получить тип. Java generics используют стирание типа, поэтому даже сам java не знает, что T во время выполнения.

Что касается обходных путей: вы можете определить foo для принятия параметра типа Class<T>, а затем использовать его.