Итак, в основном я пытался создать карту для сортировки элементов, используя их собственный тип, а затем иметь возможность извлекать их, используя этот тип, при этом имея возможность одновременно удерживать только один элемент каждого типа. Для этого я решил использовать Map<Class<? extends ParentClass>, ParentClass>.
Я думаю, что в Java это называется гетерогенным контейнером (см. это), но затем я начал думать о проблемах с производительностью (потому что мне просто любопытно, я не думаю, что когда-нибудь увижу разницу, но кто знает). Поэтому вместо того, чтобы хранить свои объекты с помощью ChildClass.class, я собирался объявить некоторую переменную идентификатора в каждом объявлении класса всех моих дочерних классов, но у меня не было бы возможности принудительно применить его объявление, потому что оно должно быть статическим.
Следует ли мне продолжать использовать .class в качестве ключей карты?
Спасибо.
Поскольку позже мне нужно будет использовать отражение для создания правильного объекта с использованием его класса, который, я думаю, будет менее эффективным, чем использование построителя для каждого из моих классов, используйте его как идентификатор, а затем вызовите его метод для создания правильного объекта. Спасибо за ваше время, надеюсь, все понятно.
Как способ создания экземпляров значений соотносится с заданным вами вопросом о ключевой тип карты?




Классы часто используются в качестве ключей карты.
См., Например, JTree.createDefaultRenderers():
protected void createDefaultRenderers() {
defaultRenderersByColumnClass = new UIDefaults(8, 0.75f);
// Objects
defaultRenderersByColumnClass.put(Object.class, (UIDefaults.LazyValue) t -> new DefaultTableCellRenderer.UIResource());
// Numbers
defaultRenderersByColumnClass.put(Number.class, (UIDefaults.LazyValue) t -> new NumberRenderer());
// Doubles and Floats
defaultRenderersByColumnClass.put(Float.class, (UIDefaults.LazyValue) t -> new DoubleRenderer());
defaultRenderersByColumnClass.put(Double.class, (UIDefaults.LazyValue) t -> new DoubleRenderer());
// Dates
defaultRenderersByColumnClass.put(Date.class, (UIDefaults.LazyValue) t -> new DateRenderer());
// Icons and ImageIcons
defaultRenderersByColumnClass.put(Icon.class, (UIDefaults.LazyValue) t -> new IconRenderer());
defaultRenderersByColumnClass.put(ImageIcon.class, (UIDefaults.LazyValue) t -> new IconRenderer());
// Booleans
defaultRenderersByColumnClass.put(Boolean.class, (UIDefaults.LazyValue) t -> new BooleanRenderer());
}
Почему объект
Classдолжен работать хуже, чем объект гипотетического идентификатора?