Java新手无法理解一些"新"语法

JD *_*ong 2 java new-operator

我是Java的新手.我用其他语言编程,主要是在需要使用仅作为Java提供的第三方库时使用Java.因此,我对语言只有非常基本的理解.但通常这足以让我的业务完成.

今天我遇到了一个基本的问题,我在谷歌上搜索或查找它时遇到了麻烦.在下面的代码片段中,我根本不理解该new GSRadContext行:

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

... 

GSRadContext gsr = new GSRadContext( (IAGSRadStrategy) algo);
gsr.evaluate(rd);
Run Code Online (Sandbox Code Playgroud)

在我有限的Java经验中,我以前从未在new object()调用中看到过这种类型的语法.你能解释一下这个(IAGSRadStrategy)位是怎么回事吗?

感谢您为我的教育做出贡献.

Jon*_*eet 8

这一点:

(IAGSRadStrategy) algo
Run Code Online (Sandbox Code Playgroud)

与构造函数完全分开.如果有帮助,您可以将第二位代码视为:

IAGSRadStrategy tmp = (IAGSRadStrategy) algo;
GSRadContext gsr = new GSRadContext(tmp);
gsr.evaluate(rd);
Run Code Online (Sandbox Code Playgroud)

这只是一个演员表达.在不知道所涉及的类型层次结构的情况下,确切地知道它为何在这里使用是很棘手的,但通常演员基本上是告诉编译器,"你只知道这个表达式为Foo,但知道它是一个吧...所以请在执行时检查它,然后将该值视为此表达式结果的条形."