我想使用多態,使基於它的類對象的不同處理動態多態調用,如下所示:強制執行與一般的父類型的輸入參數
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 )。
有沒有辦法,我可以強制執行以更好的方式多態調用的方法嗎?
在此先感謝您的幫助。
在實際應用中,參數對象('IntStuff','DoubleStuff')被打包爲'GeneralStuff'的實例到'Bundle'對象中,並傳遞給另一個對象('ProcessStuff')對象進行處理,其中參數對象被抽出並根據它們的實際類型採取不同的動作。因此,我實際上沒有在直接調用ProcessStuff中提供重載的過程方法的選項(由@βнɛƨнǤʋяʋиɢ建議),並且將'process'方法移入'GeneralStuff'也可能不是一個選項由你和@codegrabber建議)。 – 2012-01-04 06:35:47