2013-12-13 3 views
1

ОК, так что это было задано много раз, и я просмотрел различные ответы, но все же как-то не смог это понять.Java для создания экземпляра класса динамически на основе имени строки

Проблема: У меня есть 5 фрагментов (не андроид-парней, пожалуйста, возьмите классы), которые мне нужно динамически создавать на основе того, что нажато в списке. Я получаю строку в обработчике кликов. Я назвал свои фрагменты удобным. Таким образом, в основном один из моих фрагментов называется SearchResults.java, и соответствующий элемент щелчка возвращает «SearchResults». Так что я хочу сделать что-то вроде:

public void onClick(View v) { 
Class cls = Class.forname(clickedString) //clickedString = "SearchResults" 
//instantiate it as if it were equal to SearchResults sr = new SearchResults(). 
} 

Я просто хочу, чтобы избежать, если/другое или переключить случаи и ищут более разумным способом. Возможно, мне не хватает некоторых основных базовых концепций Java. Пожалуйста помоги.

+0

http://stackoverflow.com/questions/9886266/is -there-a-way-to-instantiate-a-class-by-name-in-java – Asterisk

+0

комментировать здесь через 4 года на случай, если кто-то приземлится. Фрагменты никогда не должны создаваться с помощью конструктора. см. Http://stackoverflow.com/questions/14654766/creating-a-fragment-constructor-vs-newinstance. Для общей загрузки класса по имени отражение является способом. см. комментарий Asterisk выше. –

ответ

0

Во-первых, вам нужно полностью квалифицированные имена классов, а именно: your.full.class.path.SearchResults, после чего он становится относительно легко создать экземпляр предполагая не-арг конструктор:

Class<?> cls = Class.forname(clickedString); 
SearchResults results = (SearchResults) cls.newInstance(); 
+0

, так что вы имеете в виду, что clickedString должен быть полным классом? И, как повезло, у моих фрагментов уже есть метод newInstance. Больше фабричной штуки. Надежда, которая называется, а не по умолчанию. –

+0

Это сработало бы для меня, я думаю. За исключением того, что у моих фрагментов уже есть статический метод «newInstance». –

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