Я пытаюсь использовать полиморфизм для включения различной обработки объекта в зависимости от его класса, следующим образом:
public class GeneralStuff {
private int ID;
}
public class IntStuff extends GeneralStuff {
private int value;
public void setValue(int v)
{
value = v;
}
public int getValue()
{
return value;
}
}
public class DoubleStuff extends GeneralStuff {
private double value;
public void setValue(double v)
{
value = v;
}
public double getValue()
{
return value;
}
}
public class ProcessStuff {
public String process(GeneralStuff gS)
{
return doProcess(gS);
}
private String doProcess(IntStuff i)
{
return String.format("%d", i.getValue());
}
private String doProcess(DoubleStuff d)
{
return String.format("%f", d.getValue());
}
}
public class Test {
public static void main(String[] args)
{
IntStuff iS = new IntStuff();
DoubleStuff dS = new DoubleStuff();
ProcessStuff pS = new ProcessStuff();
iS.setValue(5);
dS.setValue(23.2);
System.out.println(pS.process(iS));
System.out.println(pS.process(dS));
}
}
Это, однако, не работает, потому что при вызове doProcess(gS)
ожидается метод с подписью doProcess(GeneralStuff gS)
.
Я знаю, что я мог бы просто иметь два открытых метода полиморфных процессов в классе ProcessStuff
, но реальная ситуация не позволяет этого, потому что я работаю в рамках ограничений существующего библиотечного механизма; это просто надуманный пример для тестирования.
Я мог бы, конечно, определить process(GeneralStuff gS)
как
public String process(GeneralStuff gS)
{
if (gS instanceof IntStuff)
{
return doProcess((IntStuff) gS);
}
else if (gS instanceof DoubleStuff)
{
return doProcess((DoubleStuff) gS);
}
return "";
}
, что работает, но, похоже, мне не нужно было этого делать (плюс, полиция по программированию помешала бы мне использовать instanceof таким образом).
Есть ли способ, которым я могу лучше реализовать полиморфные вызовы?
Заранее спасибо за любую помощь.