У меня есть коллекция от одного до 100 объектов определенного типа. Эти объекты имеют более 100 атрибутов. Я должен пересекать все объекты в коллекции и проверять определенные действия, чтобы что-то с ними делать. Фактические методы зависят от файла свойств, поэтому я не могу заранее знать, какой из них мне нужно вызвать. Я сделал это с отражением таким образом:Показатель отражения
for (MyObject mo : myObjectList){
for (PropertyDescriptor propertyDescriptor : Introspector
.getBeanInfo(mo.getClass())
.getPropertyDescriptors()) {
method = propertyDescriptor.getWriteMethod();
if (method != null){
//Here I check if the attribute is in the properties file and do the job
}
}
}
Это реализуется в WebService, которая вызывается несколькими приложениями, и нагрузка может быть теоретически высокой.
Метод отражения является дорогостоящим компьютером, но это единственный способ, которым я смог выполнить задачу без изменения кода, если завтра будет задан новый атрибут задачи.
Я прочитал (не помню источник), что самая дорогая часть рефлекса ищет методы больше, чем называть их, поэтому я думал, что, возможно, меняет петли (т. Е. Ищет методы, а затем вызывает метод путем отражения для каждого объекта) - это изменение производительности. Что-то вроде этого:
for (PropertyDescriptor propertyDescriptor : Introspector
.getBeanInfo(MyObject.getClass())
.getPropertyDescriptors()) {
if (method != null){
for (MyObject mo : myObjectList){
//Do the job here
}
}
}
Есть ли основания для поворота петель?
Обратите внимание, что экземпляры 'Method' и' Field' обычно кэшируются, поэтому только первый поиск дорог. –