我有一個問題,我無法弄清楚。 使用這些類:函數在Java中使用泛型重載
- PrimitiveToken
- GBVariable
- GBFloat:
public class GBFloat extends GBVariable<Float> {
public GBFloat(String name, Float value) { super(name, value); }
}
- PLUSTOKEN:
@Override
public GBVariable<?> eval() {
return sum(a.eval(),b.eval());
}
public static GBFloat sum(GBFloat a, GBFloat b) {
System.out.println("float added");
return new GBFloat("tmp", a.getValue()+b.getValue());
}
public static GBVariable<?> sum(GBVariable<?> a, GBVariable<?> b) {
throw new RuntimeException("Adding variables of types "+a.getClass().getSimpleName()+" and "+b.getClass().getSimpleName()+" is not supported.");
}
當我執行的PLUSTOKEN eval方法,而當a和b型GBFloat的Java仍然選擇了sum(GBVariable<?> a, GBVariable<?> b)
方法並拋出異常:
Exception in thread "main" java.lang.RuntimeException: Adding variables of types GBFloat and GBFloat is not supported.
他不應該選擇更具體方法?如果我先將a.eval()和b.eval()轉換爲GBVariables,它會正常工作。爲什麼是這樣,我該如何優雅地解決這個問題?
a和b的聲明這樣:
過載new PrimitiveToken<GBFloat>(new GBFloat("tmp",Float.parseFloat("15.0")))
請將您的代碼精簡至**所需的最低**數量,以便將問題直接粘貼到您的問題中。 – 2012-03-12 17:09:44
你還沒有顯示變量'a'和'b'的聲明,這是謎題中最關鍵的部分。如果它是'GBVariable > a = new GBFloat(...)',那麼行爲就像預期的那樣。 – 2012-03-12 17:14:59