2015-10-23 6 views
0

Я новичок в Java Reflection и generics, и я пытаюсь их понять. Здесь я столкнулся с проблемой. Я могу создавать списки и карты и т. Д. Но могу ли я составить карту классов?Как сделать карту .class?

У меня, например, этот класс

public class ClassA{} 
public class ClassB extends ClassA{} 
public class ClassC extends ClassA{} 

и так далее .. Теперь я хочу карту, как эта карта(); На этой карте я могу положить anyhing, который простирается от A. Thats хорошо. Но что, если я хочу, чтобы сохранить что-то вроде этого:

ClassX extends ClassA... 
//some stuff 
Map<String, ?????> customMapForTest = new HashMap<>(); 
customMapForTest.add("customKey", ClassX.class); 

Так что я буду иметь что-то вроде карты шаблонов некоторых классов, которые я хочу использовать в зависимости от своих настроек.

Возможно ли это как можно? Как это называется, если я хочу хранить такие файлы .class на карте?

Чтобы получить больше информации, у меня есть собственное приложение // Не волнуйтесь, это не публичный проект или что-то еще ... просто для экспериментов. У меня есть файл с некоторыми символами вроде этого: X7WE2C3AD4A2 Только некоторые случайные вещи. Теперь у меня есть файловый читатель, который читает каждый символ и на его основе ищет карту, которую я создал, берет класс этого файла и создает новый экземпляр этого класса и добавляет некоторые значения на основе типа.

пример:

customMapForTesting.get("X").getClass().getDeclaredConstructor(int.class,String.class).newInstance(numberVariable, stringVariable); 

хранит, что новые экземпляры к другой карте и использовать его в каком-либо другом материале. Проблема мне нужны все возможные объекты, простирающиеся мой шаблон, и я не хочу, чтобы хранить экземпляры внутри templateMap ...

+0

'Map >'. –

ответ

2

java.lang.Class типа это то, что вы ищете

Map<String, Class<?>> map = new HashMap<>(); 
map.put("string",String.class); 

Только учти, int.class отличается от Integer.class

System.out.println(int.class.equals(Integer.class)); //false 
System.out.println(int.class.equals(Integer.TYPE)); //true 
+0

Я пробовал что-то подобное раньше, но я написал это плохо. У меня есть что-то вроде этого: Карта extends ClassA) .... теперь я обнаружил, что это написано вот так: Class ... Но спасибо в любом случае :-) Я думаю, что каждый знает разницу между int и Integer ... Я использовал это, например, и это было первым, что пришло в голову. Я прочитал много Java Wtf-кодов, так что я пробовал их, но все же я делаю глупую ошибку, как я здесь. –

Смежные вопросы