Java新手在理解某些“新”语法时遇到困难
我是Java的新手。我用其他语言编程,我主要在需要使用第三方库时使用Java,这些库只能作为Java使用。因此,我对这门语言只有非常基本的理解。但通常这足以让我的生意完成 今天我遇到了一个非常基本的问题,我在谷歌搜索或查找时遇到了麻烦。在下面的代码片段中,我根本不理解Java新手在理解某些“新”语法时遇到困难,java,new-operator,Java,New Operator,我是Java的新手。我用其他语言编程,我主要在需要使用第三方库时使用Java,这些库只能作为Java使用。因此,我对这门语言只有非常基本的理解。但通常这足以让我的生意完成 今天我遇到了一个非常基本的问题,我在谷歌搜索或查找时遇到了麻烦。在下面的代码片段中,我根本不理解新的GSRadContext行: GSRBristowCampbellStrategy algo = new GSRBristowCampbellStrategy(); RadData rd = new RadData(); ..
新的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接口的东西。总有一天,人们会适当地使用泛型,铸造将被认为是非常深奥的。