String fullName = PATH + "." + name;
Class cl= Class.forName(fullName);
if(name.equalsIgnoreCase("MobileSearch")){
if(msearchType==null){
msearchType=(SearchInterface)cl.newInstance();
}
return msearchType;
}
if(name.equalsIgnoreCase("BookSearch")){
if(bsearchType==null){
bsearchType=(SearchInterface)cl.newInstance();
}
return bsearchType;
}
Как мне избавиться от if
заявлений здесь.
Я использую отражение.
Пожалуйста помоги. Заранее спасибо.
0 java
sam
10.12.2008 12:32:46
Недостаточно кода, чтобы понять, что вы хотите. Что такое msearchtype и bsearchtype? Откуда вы взяли имя?
gcores
10.12.2008 12:42:59
3 ОТВЕТА
Вы просто возвращаете экземпляр SearchInterface? Если так, то почему бы и нет
String fullName = PATH + "." + name;
Class cl= Class.forName(fullName);
if(searchType==null){
searchType=(SearchInterface)cl.newInstance();
}
return searchType;
Надеюсь, это поможет.
0
Jacob Schoen
10.12.2008 12:45:12
Мне нужно создать только один экземпляр, то есть синглтон, и у меня есть несколько доменов. Как показано в фрагменте, который я разместил, я проверяю, является ли каждый объект домена пустым, прежде чем создать экземпляр. Я хочу обойти это. пожалуйста помоги.
sam
10.12.2008 12:54:41
@Sam - используйте решение Nicks, оно должно решить вашу проблему, используя карту. Если его нет на карте, вы создаете экземпляр, и это уменьшает количество операторов if в вашем коде. Кроме того, в будущем, если вы добавите больше типов SearchInterface, вам не нужно будет менять код, если только путь не изменится
Jacob Schoen
10.12.2008 13:03:33
Используйте карту:
if (!searchInstances.containsKey(name))
{
searchInstances.put(
name,
(SearchInterface)Class.forName(PATH + "." + name).newInstance()
);
}
return searchInstances.get(name);
2
Nick Holt
10.12.2008 12:45:32
это даст вам другую перспективу
0
Gabriel Ramirez
26.10.2012 15:51:22