Из-за динамической природы загрузчиков классов это невозможно. Кластерные загрузчики не обязаны сообщать VM, какие классы он может предоставить, вместо этого они просто передают запросы для классов и должны возвращать класс или исключать исключение.
Однако, если вы пишете свой собственный класс загрузчики или исследовать пути к классам и его баночки, эту информацию можно найти. Это будет осуществляться через операции с файловой системой, но не отражением. Там могут быть библиотеки, которые могут вам помочь.
Если есть классы, которые генерируются или передаются удаленно, вы не сможете обнаружить эти классы.
Обычный метод вместо этого должен где-то регистрировать классы, к которым вам нужен доступ в файл, или ссылаться на них в другом классе. Или просто используйте соглашение, когда дело доходит до именования.
Приложение: Библиотека отражений позволит вам искать классы в текущем пути к классам. Его можно использовать для получения всех классов в пакете:
Reflections reflections = new Reflections("my.project.prefix");
Set> allClasses =
reflections.getSubTypesOf(Object.class);
В C, int
, по крайней мере, был предназначен для имения "естественного" размера слова ЦП, и long
был, вероятно, предназначен, чтобы быть "большим естественным" размером слова (не уверенный в той последней части, но это также объяснит, почему int
и long
имеют тот же размер на x86).
Теперь, мое предположение: для int
и long
, существует естественное представление, которое соответствует точно регистрам машины. На большинстве центральных процессоров однако, меньшие типы byte
и short
должны были бы быть дополнены к int
так или иначе прежде чем быть используемым. Если это так, у Вас может также быть бросок.
Я подозреваю, что это - случай, "не добавляет ничто к языку, если это действительно не увеличивает стоимость" - и это рассматривалось как добавляющий достаточно мало значения для не ценности того. Как Вы сказали, легко двигаться, и откровенно это редко необходимо так или иначе (только для разрешения неоднозначности).
то же верно в C#, и я особенно никогда не пропускал его ни на одном языке. То, что я действительно пропускаю в Java, является неподписанным типом байта:)
Другая причина могла бы состоять в том, что JVM не знает о коротком и байте. Все вычисления и хранение сделаны с ints, longs, плавают и удваиваются в JVM.