Мне нужна рекурсивная функция, которая печатает сигнатуру класса, включая имя класса и значения параметров типа uf.
MyNewClass , Map , String >> x = new MyNewClass <...> ();
Assert.assert (getSimpleNameWithGenerics (x) .equals ("MyNewClass , Map , String >>"));
Поскольку я новичок в Java, я был очень удивлен, что не нашел такой функции в сообществе Java и не смог легко ее реализовать.
Вот моя попытка:
public static String getGenericClassSimpleName (Class <?> C) {
String s = c.getSimpleName();
TypeVariable[] tv = c.getTypeParameters();
for(int i = 0; i < tv.length; i++) {
s += i == 0 ? "<" : ",";
s += getGenericClassSimpleName(tv[i].getGenericDeclaration().getClass());
}
if(tv.length > 0) s += ">";
return s;
}
, но это заканчивается переполнением стека (вот почему я решил спросить здесь, смеется), столкнувшись с классом TypeVariable ... Я никогда не находил способ добраться до реальных "граней" переменных типа.