На практике Java ожидает объект для ввода и вывода для всего,
Ну, нет, это завышение.Даже если мы исключим элементы синтаксиса, такие как знаки препинания и ключевые слова, в Java есть значения примитивного типа.И у него есть имена типов.
и, будучи неотъемлемо языком ООП, все рассматривается как объект,
Вы попадаете в неприятности, беспечно разбрасываясь вокругслово «все».Я думаю, вы пытаетесь утверждать, что на языке ОО все данные представлены внутри программы объектами.По крайней мере, это наиболее правдоподобная интерпретация, которую я могу достичь, и на самом деле это верно для некоторых ОО-языков (SmallTalk, Ruby, ...), но не для Java.
, поэтому мне было интереснокакого типа объект является ReferenceType в производстве, RelationalExpression (instanceof)?
Это не объект.Это имя типа.
Как оно представлено в JVM во время выполнения?
Мне бы пришлось проверить, чтобы быть уверенным, но весьма вероятно, что оно представленоссылка на пул констант класса, в котором появляется выражение.
Какой тип объектов может быть передан этому выражению, если оно есть, если обычно тип используется в объявлениях, таких как объявления классовили объявления переменных?
Правый операнд выражения instanceof
- это имя типа, точно так же, как оно используется в объявлениях класса и переменных.Это не значение, ни ссылочный, ни примитивный тип.
Является ли это «метаобъектом», который представляет только реальный тип или класс,
Язык Java не имеет понятия «мета-объект», по крайней мере, в отличие от объектов типа java.lang.Class
.Но объекты типа Class
все еще являются объектами, и ссылки на них не подходят для использования в качестве правого операнда выражений instanceof
.Правый операнд должен быть именем типа.
, и почему разработчики Java не разрешают передавать объект Class вместо ReferenceType, или я имею в виду неправильную парадигму для instanceof?
Я не могу авторитетно говорить о мотивах дизайнеров Java, не будучи одним из них.Однако я замечаю, что Class.isInstance()
, доступный после Java 1.1, служит для той же цели, что и ссылка на Class
, как это сделал бы правый операнд выражения instanceof
.
Правый операнд instanceof
должен быть именем типа.