Отражение Java несколько помогает, но отсутствует часть данных. Кроме того, отражение обычно выдает МНОЖЕСТВО проверенных исключений, которые вам нужно будет отловить. (Я включил список после кода)
Что это за объект, который содержит методы "doSomething"? В этом примере я использую имя переменной «someObject» для представления объекта, содержащего метод «doSomething». Вам нужно заменить это чем-то более чувственным.
Кроме того, просто предупреждение, оно не будет перехватывать производные типы, поэтому, если определение метода не соответствует заданному типу, вы получите исключение метода not found.
//now I want to call doSomething method
// (1)
Method method = someObject.getClass.getMethod("doSomething",new Class[] {o.getClass()});
method.invoke(someObject, new Object[] {o});
// (2)
Предупреждение. При использовании рефлексии вам необходимо иметь дело со следующими исключениями: (Кстати, это не необычный список, рефлексия обычно очень шумная с точки зрения исключений)
NoSuchMethodException - if a matching method is not found or if the name is "<init>"or "<clinit>".
NullPointerException - if name is null
SecurityException - if access to the information is denied.
IllegalAccessException - if this Method object enforces Java language access control and the underlying method is inaccessible.
IllegalArgumentException - if the method is an instance method and the specified object argument is not an instance of the class or interface declaring the underlying method (or of a subclass or implementor thereof); if the number of actual and formal parameters differ; if an unwrapping conversion for primitive arguments fails; or if, after possible unwrapping, a parameter value cannot be converted to the corresponding formal parameter type by a method invocation conversion.
InvocationTargetException - if the underlying method throws an exception.
NullPointerException - if the specified object is null and the method is an instance method.
ExceptionInInitializerError - if the initialization provoked by this method fails.