Если вы можете заставить их всех реализовать интерфейс, это, безусловно, будет лучшим вариантом. Тем не менее, отражение также будет работать, и ваш код был почти там:
Object o = getFromSomeWhere.....;
Method m = o.getClass().getMethod("getDate");
Date date = (Date) m.invoke(o);
(Есть куча исключений, которые вам нужно обработать, по общему признанию ...)
Для полного примера:
import java.lang.reflect.*;
import java.util.*;
public class Test
{
public static void main(String[] args) throws Exception
{
Object o = new Test();
Method m = o.getClass().getMethod("getDate");
Date date = (Date) m.invoke(o);
System.out.println(date);
}
public Date getDate()
{
return new Date();
}
}