Получение строкового имени класса в рантайме Java

Есть функция которая принимает тип данных(не знаю как точно называется)
И нужно для определенных манипуляций получить название класса.
Вот пример кода.

public class SomeClass {
    

    public <T> String getClassName() {
        return /*тут надо получить название класса T*/; 
    }

    public static void main (String[] arg) {
        System.out.println(getClassName<String>());
    }

}

И вобще как называется запись типа <T>


Ответы (1 шт):

Автор решения: Librian

В функцию можно передать класс и получить его название:

class SomeClass {
    public String getClassName(Class<?> c) {
        return c.getTypeName();
    }

    public static void main(String[] arg) {
        System.out.println(new SomeClass().getClassName(String.class));
    }
}

Вернет: java.lang.String

Получить названия типа через T нельзя, можно получить класс объекта, который присвоен полю с типом T, например:

class SomeClass<T> {
    T type;

    SomeClass(T type) {
        this.type = type;
    }

    public String getClassName() {
        return type.getClass().getTypeName();
    }

    public static void main(String[] arg) {
        System.out.println(new SomeClass<>("SomeObject").getClassName());
    }
}
→ Ссылка