Я видел много вопросов с похожим названием в StackOverflow, но все эти ответы, похоже, предлагают метод getClass().getSimpleName()
.Проблема в том, что я не хочу знать тип значения, которое содержит переменная, меня интересует тип самой переменной.В следующем коде я хочу напечатать Object
, а не String
:
Object ob = "Some String";
System.out.println(ob.getClass().getSimpleName()); // prints "String"
Учитывая, что тип переменной будет супертипом значения, которое она содержит, я могу проверить, еслизначение instanceof
некоторый класс.Но instanceof
будет возвращать true для всех суперклассов, пока мы не достигнем Object в иерархии.Есть ли способ специально проверить тип переменной?
В производственном коде для этого не может быть практического использования, но знание типа переменной может упростить применение обобщений.Рассмотрим этот метод:
public static <T> void test (T a, T b) {
}
Мы не знаем, какой тип выводит компилятор, когда test
вызывается с двумя разными аргументами.Может быть полезно распечатать то, что заменено T
.Мы знаем, что T будет заменен наиболее конкретным типом, который оба типа аргументов наследуют при запуске программы.Но если бы я напечатал этот тип, я бы не смог.