Мне интересно, не злоупотребляю ли я Java-отражением.
У меня есть класс, который является держателем данных для пары карт. У меня есть публичные методы get (...), которые дают ключ в качестве входных данных, возвращают значение, связанное с ним в соответствующей карте.
Поскольку карты велики, я загружаю их только тогда, когда действительно хочу получить к ним доступ. Итак, в каждом методе get (...) я проверяю, является ли карта нулевой. Если это так, я вызываю соответствующий метод loadMap (..).
Вот пример кода
public getId(String name)
{
try
{
if(nameMap1 == null)
loadNameMap1();
} catch(...) {....}
return nameMap1.getId(name);
}
Проблема в том, что у меня есть несколько карт. Итак, для загрузки каждой карты у меня есть другой метод loadMap (..) и блок try catch в методах get (...). Поэтому вместо этого я написал метод loadMap (Object map, String methodName), который использует отражение для вызова соответствующего метода и обрабатывает все исключения.
private synchronized void loadMap(Object map, String methodName)
{
if (map == null)
try
{
Method method = this.getClass().getDeclaredMethod(methodName, new Class[0]);
method.invoke(this, new Object[0]);
}
catch (..)
}
Я злоупотребляю здесь отражением? Есть лучший способ сделать это? Означает ли это «ограниченное использование отражения», как написано в «1010 * Effective Java» Джошуа Блоха
(Примечание: я не могу реорганизовать класс в несколько классов)