Почему не там никакой байт или короткие литералы в Java?

Из-за динамической природы загрузчиков классов это невозможно. Кластерные загрузчики не обязаны сообщать VM, какие классы он может предоставить, вместо этого они просто передают запросы для классов и должны возвращать класс или исключать исключение.

Однако, если вы пишете свой собственный класс загрузчики или исследовать пути к классам и его баночки, эту информацию можно найти. Это будет осуществляться через операции с файловой системой, но не отражением. Там могут быть библиотеки, которые могут вам помочь.

Если есть классы, которые генерируются или передаются удаленно, вы не сможете обнаружить эти классы.

Обычный метод вместо этого должен где-то регистрировать классы, к которым вам нужен доступ в файл, или ссылаться на них в другом классе. Или просто используйте соглашение, когда дело доходит до именования.

Приложение: Библиотека отражений позволит вам искать классы в текущем пути к классам. Его можно использовать для получения всех классов в пакете:

 Reflections reflections = new Reflections("my.project.prefix");

 Set> allClasses = 
     reflections.getSubTypesOf(Object.class);

53
задан Will Wagner 25 November 2008 в 15:57
поделиться

3 ответа

В C, int, по крайней мере, был предназначен для имения "естественного" размера слова ЦП, и long был, вероятно, предназначен, чтобы быть "большим естественным" размером слова (не уверенный в той последней части, но это также объяснит, почему int и long имеют тот же размер на x86).

Теперь, мое предположение: для int и long, существует естественное представление, которое соответствует точно регистрам машины. На большинстве центральных процессоров однако, меньшие типы byte и short должны были бы быть дополнены к int так или иначе прежде чем быть используемым. Если это так, у Вас может также быть бросок.

15
ответ дан Julien Oster 7 November 2019 в 18:53
поделиться

Я подозреваю, что это - случай, "не добавляет ничто к языку, если это действительно не увеличивает стоимость" - и это рассматривалось как добавляющий достаточно мало значения для не ценности того. Как Вы сказали, легко двигаться, и откровенно это редко необходимо так или иначе (только для разрешения неоднозначности).

то же верно в C#, и я особенно никогда не пропускал его ни на одном языке. То, что я действительно пропускаю в Java, является неподписанным типом байта:)

8
ответ дан Jon Skeet 7 November 2019 в 18:53
поделиться

Другая причина могла бы состоять в том, что JVM не знает о коротком и байте. Все вычисления и хранение сделаны с ints, longs, плавают и удваиваются в JVM.

4
ответ дан Joachim Sauer 7 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: