Прежде всего:
Создает ли instanceof
статический классификатор типов?
Совсем нет. Это просто оператор, который возвращает логический результат. Это говорит вам if A is an instance of B
. Не больше, не меньше.
В Java вся информация о типах (по крайней мере, во время выполнения) сводится к тому, что дает вам java.lang.Class.
Другими словами: когда вы int foo = 3
на Java, лучшее, на что вы надеетесь, будет Class<?> bar = int.class
. Также обратите внимание, что нет никакого общего способа добраться до объекта класса «что-то».
Единственное немного «продвинутый опыт» был добавлен с новым ключевым словом var
. Который в основном позволяет вам теперь явно записывать типы, но пусть компилятор обрабатывает их полностью.
Еще один семантический элемент, который var
дает вам: возможность «назвать» то, что в противном случае не имеет имени:
var obj = new Object() {
private void test() {
System.out.println("anonymous test");
}
};
obj.test(); // works!
(из бюллетеня для специалистов по Java, выпуск 263 )