2012-05-07 3 views
1

Если мне нужно вернуть экземпляр класса, основанный на String (например, создавая логику JSON), как это должно быть написано?Как получить ссылку на класс из String в Java?

Моя первоначальная мысль была коммутатором, но в версии Java на платформе Android выглядит так, что операторы switch не позволяют Strings.

Следующая мысль была HashMap:

private HashMap<String, Class> classMap = new HashMap<String, Class>(); 
classMap.put("someClass", SomeClass.class)? 
// ... etc 
String someString = jsonObject.getString("someProperty"); 
Class classRef = classMap.get(someString); 
SomeSuperClass classInstance = new classRef(); 

Это не работает. Я бы предпочел не if/else по длинному списку возможностей.

+1

Никакая версия Java не допускает операторов switch со строками (кроме Java 7, но все знают, что это всего лишь миф, чтобы держать нас в покое). – Tharwen

ответ

4

Просто используйте Class<?> clazz = Class.forName("com.yourpackage.YourClass") Затем его экземпляр: clazz.newInstance();

+0

удивительный, спасибо. Я соглашусь, когда это позволит мне (6 минут) – momo

+0

Это вернет ссылку класса Object, а не ссылку класса класса. –

+3

@Bhavik первая строка Class.forName ("...") возвращает ссылку на класс. Вторая строка создает экземпляр объекта и создает объект. –

0

Ваш подход с использованием карты является то, что я хотел бы сделать (и вы увидите его в реализации шаблонов Factory). Вы просто не создаете экземпляр класса правильно:

Class classRef = classMap.get(someString); 
SomeSuperClass classInstance = classRef.newInstance(); 
1

Вы также можете загрузить класс с параметрами конструктора.

E.g.

+0

Вам не нужно возвращать созданный экземпляр Plugin? – Natix

+0

Мы можем вернуть созданный экземпляр «Plugin», но я хотел показать пример, что вы можете создать экземпляр объекта, хотя он имеет конструктор с аргументами. –

+0

@BhavikAmbani - интересно, спасибо – momo

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