Производит ли instanceof статический классификатор типов? - PullRequest
1 голос
/ 27 мая 2019

В Typescript можно взять символ и использовать его сигнатуру (и все, что компилятор знает об объекте) в качестве допустимого квалификатора типа.Это позволяет вам сделать это:

const foo: number = 3

const bar: typeof foo = 4

Возможно ли это на других языках?Мне сказали, что это возможно в Java с использованием instanceof, но я изо всех сил пытался найти любую документацию по этому ключевому слову, кроме динамической проверки типов.

1 Ответ

3 голосов
/ 27 мая 2019

Прежде всего:

Создает ли 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 )

...