2011-02-15 15 views
2

我是Java的相對新手。我使用其他語言編程,主要在我需要使用僅作爲Java提供的第三方庫時使用Java。因此,我對語言只有非常基本的理解。但通常這足以讓我的業務完成。Java新手無法理解一些`新`語法

今天我遇到了一個非常基本的問題,我很難搜索或查找它。在下面的代碼snipit我不懂new GSRadContext線都:

GSRBristowCampbellStrategy algo = new GSRBristowCampbellStrategy(); 
RadData rd = new RadData(); 

... 

GSRadContext gsr = new GSRadContext((IAGSRadStrategy) algo); 
gsr.evaluate(rd); 

在我有限的Java經驗,我以前從未見過這種類型的語法的new object()呼叫內。你能向我解釋(IAGSRadStrategy)位發生了什麼事嗎?

感謝您爲我的教育作出貢獻。

+0

有一天人們會適當地使用泛型,而鑄造將被認爲是非常深奧的。 – 2011-02-16 03:16:47

回答

8

該位:

(IAGSRadStrategy) algo 

是從構造完全分開的。如果有幫助,您可以將第二位代碼想象爲:

IAGSRadStrategy tmp = (IAGSRadStrategy) algo; 
GSRadContext gsr = new GSRadContext(tmp); 
gsr.evaluate(rd); 

這只是一個表達式。不知道所涉及的類型層次結構,很難確切知道它爲什麼在這裏被使用,但通常是一個演員陣容是基本告訴編譯器,「你只知道這個表達式爲Foo,但是知道它是一個Bar。 ..所以請在執行時檢查它,然後將該值作爲Bar的值來表示結果。「

+0

非常有意義。我知道這麼小的Java,當我看到它時,我沒有認出演員。現在我明白了! – 2011-02-15 18:45:33

1

algo,對GSRBristowCampbellStrategy的引用正在轉換爲IAGSRadStrategy並傳遞給GSRadContext構造函數。

無端維基百科鏈接:

Type Conversion

1

GSRadContext類有一個構造,這需要IAGSRadStrategy類型的對象作爲參數。 algo實例是IAGSRadStrategy的一個子類型,這就是爲什麼它被輸入到該類型中的原因。