2011-04-01 68 views
16

我很困惑究竟調度是什麼。特別是當涉及到雙重調度時。有一個簡單的方法可以理解這個概念嗎?在java中調度什麼

+0

哈哈是啊...我想如果我明白調度,我會更好地瞭解訪客模式 – thunderousNinja 2011-04-01 01:50:33

+0

啊是的。對不起,我將刪除標籤。這與設計模式無關:) – BalusC 2011-04-01 01:51:39

+1

只需注意「調度」一詞有些超載。它也可能意味着將計劃任務放到處理器上的操作。在一些實時調度程序中,調度程序和調度程序的概念是不同的想法和軟件組件。 – andersoj 2011-04-01 02:29:31

回答

29

調度是語言將調用鏈接到函數/方法定義的方式。

在java中,一個類可能有多個名稱相同但參數類型不同的方法,並且該語言指定使用具有最特定類型的參數的正確數量的方法調用方法調用可以匹配。這是靜態調度。

例如,

void foo(String s) { ... } 
void foo(Object o) { ... } 
{ foo("");   } // statically dispatched to foo(String) 
{ foo(new Object()); } // statically dispatched to foo(Object) 
{ foo((Object) ""); } // statically dispatched to foo(Object) 

Java還具有虛擬方法分派。子類可以重寫在超類中聲明的方法。因此,在運行時,JVM必須將方法調用分派到適合運行時類型this的方法版本。

例如,

class Base { void foo() { ... } } 
class Derived extends Base { @Override void foo() { ... } } 


{ new Derived().foo(); } // Dynamically dispatched to Derived.foo. 
{ 
    Base x = new Base(); 
    x.foo();    // Dynamically dispatched to Base.foo. 
    x = new Derived();  // x's static type is still Base. 
    x.foo();    // Dynamically dispatched to Derived.foo. 
} 

雙調度靜態運行時(也稱爲動態)調度組合。

+0

謝謝!這幫助了很多。 – thunderousNinja 2011-04-01 01:47:49

+0

這是一個非常好的答案。我知道Java不是一種雙重調度語言,但是您能否添加一個例子來說明在當前示例的上下文中雙重調度WOULD的樣子?我猜測它會像'x.foo(「」)'',但我認爲這將是非常有用的看到它。 – Ogen 2016-10-11 23:20:47

+0

@Ogen,這是關於Java中的雙重調度。你能說JavaScript嗎? – 2016-10-11 23:57:02