Предположительно, у вас есть конечное число классов, реализующих этот метод, и вы можете ссылаться на них напрямую. Так что вам не нужно отражение. Отражение это зло.
Скажем, у вас есть набор классов с методом:
public class LibA { public Program getProgram() { return program; } ... };
public class LibB { public Program getProgram() { return program; } ... };
...
Тогда вам просто нужны пары instanceof / cast. Вы можете поместить это в метод, так что вам нужно будет сделать это только один раз.
public static Program getProgram(Object obj) {
if (obj instanceof LibA) {
return ((LibA)obj).getProgram();
} else if (obj instanceof LibB) {
return ((LibB)obj).getProgram();
} else {
throw new IllegalArgumentException(obj+" doesn't have a known getProgram");
// Or an appropriate application exception.
}
}
В качестве альтернативы вы можете использовать адаптер:
public interface ProgramContainer {
Program getProgram();
...
}
public class LibAContainer implements ProgramContainer {
private final LibA libA;
public LibAContainer(LibA libA) {
this.libA = libA;
}
public Program getProgram() {
return libA.getProgram();
}
...
}