我剛剛開始討論Java中的泛型,並且遇到了一些奇怪的行爲。這是簡化的版本,但我有一個基類,它被多個類傳入一個通用函數。在這個函數內部,我調用了一個有幾個版本的方法,它們將不同的基類或派生類作爲參數。Java多態通用調用
如果我有以下幾點:
public class A{};
public class B extends A{};
public class C extends A{};
public class Runner
{
public static void Run(ClassA a){Do Something};
public static void Run(ClassB b){Do Something};
public static void Run(ClassC c){Do Something};
}
void SomeRandomCall<B extends ClassA>(B b)
{
Runner.Run(b);
}
SomeRandomCall<ClassB>(new ClassB());
我在Runner.Run
被調用Run(ClassA a)
,而不是運行(ClassB b)
功能調試尋找。給定這兩個函數,不應該調用Run(ClassB b)
,因爲提供了類型特定的函數?
如果不是這種情況,我將如何能夠擁有一個通用函數來調用能夠調用帶有基類和派生類的簽名的函數?
「泛型」?你的意思是「繼承」吧? – Astrobleme
'void SomeRandomCall (B b)'應該是什麼?爲什麼B(我是一個類)在'<>'(什麼表示泛型)? – exception1
「公共類B擴展A {}」中的「B」;「與「void SomeRandomCall (B b)」中的「B」完全無關。它可能是「void SomeRandomCall(Z z)」 –
aliteralmind