В зависимости от кода вы можете сделать что-то вроде:
public class Util
{
public static void duplicateMethod()
{
// code goes here
}
}
, а затем просто вызовите два других метода duplicateMethods. Поэтому код не будет дублироваться, но имя метода и вызов Util.duplicateMethod будут.
Если код в Util.duplicateMethod необходим для доступа к переменным экземпляра / класса класса A и B, это не сработает так хорошо, но это может быть сделано (дайте мне знать, если вам это нужно).
РЕДАКТИРОВАТЬ (на основе комментариев):
С переменными экземпляра это становится менее симпатичным ... но может быть сделано. Что-то вроде:
interface X
{
int getVar();
void setVar(A a);
}
class A
extends ApiClass
implements X
{
}
class B
extends AnotherApiClass
implements X
{
}
class Util
{
public static void duplicateMethod(X x)
{
int val = x.getVal();
x.setVal(val + 1);
}
}
Таким образом, для каждой переменной, к которой вам нужно получить доступ, вы должны создать метод get (и установить при необходимости). Мне не нравится этот способ, так как он делает методы get / set общедоступными, что может означать, что вы делаете вещи, которые вы не хотите быть доступными. Альтернативой было бы сделать что-то с помощью рефлексии, но я бы хотел этого еще меньше: -)