Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java新手在理解某些“新”语法时遇到困难_Java_New Operator - Fatal编程技术网

Java新手在理解某些“新”语法时遇到困难

Java新手在理解某些“新”语法时遇到困难,java,new-operator,Java,New Operator,我是Java的新手。我用其他语言编程,我主要在需要使用第三方库时使用Java,这些库只能作为Java使用。因此,我对这门语言只有非常基本的理解。但通常这足以让我的生意完成 今天我遇到了一个非常基本的问题,我在谷歌搜索或查找时遇到了麻烦。在下面的代码片段中,我根本不理解新的GSRadContext行: GSRBristowCampbellStrategy algo = new GSRBristowCampbellStrategy(); RadData rd = new RadData(); ..

我是Java的新手。我用其他语言编程,我主要在需要使用第三方库时使用Java,这些库只能作为Java使用。因此,我对这门语言只有非常基本的理解。但通常这足以让我的生意完成

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

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

... 

GSRadContext gsr = new GSRadContext( (IAGSRadStrategy) algo);
gsr.evaluate(rd);
在我有限的Java经验中,我以前从未在
newobject()
调用中见过这种语法。你能解释一下
(IAGSRadStrategy)
位是怎么回事吗

谢谢你对我的教育做出的贡献

此位:

(IAGSRadStrategy) algo
与构造函数完全分离。如果有帮助,您可以将第二位代码想象为:

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

这只是一个演员的表情。在不知道所涉及的类型层次结构的情况下,很难确切地知道它在这里使用的原因,但通常情况下,强制转换基本上是告诉编译器,“您只知道这个表达式是Foo,但我知道它是一个Bar…所以请在执行时为我检查它,然后将该值作为该表达式结果的Bar处理。”
algo
,对
GSRBristowCampbellStrategy
的引用被转换为
IAGSRadStrategy
,并传递给
GSRadContext
构造函数

免费维基百科链接:


这个
GSRadContext
类有一个构造函数,它将
IAGSRadStrategy
类型的对象作为参数。
algo
实例是IAGSRadStrategy的一个子类型,这就是它被类型转换成该类型的原因。

非常有意义。我对Java知之甚少,当我看到它的时候,我都不认识它。现在我知道了!此外,这意味着GSRadContext()方法需要类型为IAGSRadStrategy的参数,并且您显式地将algo变量强制转换为该类型。看起来“algo”是实现IAGSRadStrategy接口的东西。总有一天,人们会适当地使用泛型,铸造将被认为是非常深奥的。