Существует способ использования отражения:
try{
Method m= object.getClass().getMethod("getField"+String.valueOf(i), new Class[]{});
fields+=(String)m.invoke(object);
}catch(...){...}
Однако: Этот бизнес все запахи плохого кодирования практике! Не можете ли вы переписать все методы getFieldN()
?
String getField(int fieldNum)
У вас возникли проблемы с созданием нумерованных методов. Помните, что отражение медленное и должно использоваться только тогда, когда вызовы методов на основе String абсолютно необходимы для потока вашей программы. Я иногда использую этот метод для пользовательских языков сценариев, где вы должны получить метод по имени. Это совсем не так, ваши звонки: integer-indexed. Поэтому вы должны сохранить целое число как параметр.
Если это устаревший код, и вы абсолютно не можете изменить это плохое кодирование, вам может быть лучше создать новый метод getMethod(int)
, как описано выше, чтобы обернуть существующие методы, которые просто делегируют нумерованные методы getMethodN()
.
Я, наверное, забыл упомянуть, что у моего класса есть и другие методы, которые я не хочу вызывать. Будет ли ваш код по-прежнему выполнять работу? – 2010-07-23 08:42:48
Если вы знаете свои подписи, вы можете вызывать только их, основываясь на 'method.getName()' и на 'method.getParameterTypes()' –