我是Java的新手。我用其他语言编程,主要是在需要使用仅作为Java提供的第三方库时使用Java。因此,我对语言只有非常基本的理解。但通常这足以让我的业务完成。
今天我遇到了一个非常基本的问题我在谷歌搜索或查找时遇到了麻烦。在下面的代码片段中,我根本不理解new GSRadContext
行:
GSRBristowCampbellStrategy algo = new GSRBristowCampbellStrategy();
RadData rd = new RadData();
...
GSRadContext gsr = new GSRadContext( (IAGSRadStrategy) algo);
gsr.evaluate(rd);
在我有限的Java经验中,我以前从未在new object()
调用中看到过这种类型的语法。你能解释一下(IAGSRadStrategy)
位发生了什么吗?
感谢您为我的教育做出贡献。
答案 0 :(得分:8)
这一位:
(IAGSRadStrategy) algo
与构造函数完全分开。如果有帮助,您可以将第二位代码视为:
IAGSRadStrategy tmp = (IAGSRadStrategy) algo;
GSRadContext gsr = new GSRadContext(tmp);
gsr.evaluate(rd);
这只是一个演员表达。在不知道所涉及的类型层次结构的情况下,确切地知道它为何在这里使用是很棘手的,但通常一个演员基本上是告诉编译器,“你只知道这个表达式为Foo,但我知道它是一个Bar ...所以请在执行时为我检查它,然后将该值视为条形图的结果。“
答案 1 :(得分:1)
algo
,对GSRBristowCampbellStrategy
的引用被转换为IAGSRadStrategy
并传递给GSRadContext
构造函数。
免费维基百科链接:
答案 2 :(得分:1)
这个GSRadContext
类有一个构造函数,它以IAGSRadStrategy
类型的对象作为参数。 algo
实例是IAGSRadStrategy的子类型,这就是它被类型转换为该类型的原因。