Если классы не реализуют общий интерфейс или не расширяют общий базовый класс - т. Е. Нет никакой связи между двумя наборами методов, кроме имен и сигнатур, - тогда единственный способ достичь этого - это отражение.
String getString(Object companyOrPeople) throws InvocationTargetException, IllegalAccessException
{
if (companyOrPeople == null) {
return "";
}
final Method getNmBn = companyOrPeople.getClass().getDeclaredMethod("getNmBn");
final String nmBm = getNmBn.invoke(companyOrPeople).toString();
// same with the other two methods
return nmBm + "|" + nm + "#" + id;
}
Однако это не рекомендуется.Вы теряете все гарантии времени компиляции, что эти методы действительно существуют.Ничто не мешает кому-то передавать Integer, String или любой другой тип, у которого нет этих методов получения.
Лучшее, что можно сделать, - это изменить существующие типы, но если вы не можете, вы можете 'т.
Если вы решите изменить существующие типы, сделайте себе одолжение и измените имя атрибутов.Потому что, черт возьми, это nmBn?О, конечно, в каждой компании есть нумбун.Как глупо с моей стороны.