什么是;调用;在这个java代码中是什么意思
我对Java有实际的了解。我理解。我还了解匿名类的基本知识。我正在阅读Spark示例,看到一个“call”语句。什么是;调用;在这个java代码中是什么意思,java,anonymous-class,Java,Anonymous Class,我对Java有实际的了解。我理解。我还了解匿名类的基本知识。我正在阅读Spark示例,看到一个“call”语句。调用和@覆盖的含义是什么?我看到调用不是保留字,但在Spark文档或import语句中也没有看到。有人能分析一下这段代码中发生了什么吗?我知道它将一个匿名类作为参数传递(对吗?),然后这个抽象类有一个名为“call”的匿名方法(对吗?)。但是什么被覆盖了呢?为什么@会覆盖?调用指的是什么 JavaPairRDD<String, Integer> ones = words.m
调用
和@覆盖
的含义是什么?我看到调用不是保留字,但在Spark文档或import语句中也没有看到。有人能分析一下这段代码中发生了什么吗?我知道它将一个匿名类作为参数传递(对吗?),然后这个抽象类有一个名为“call”的匿名方法(对吗?)。但是什么被覆盖了呢?为什么@会覆盖?调用
指的是什么
JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
javapairdd ones=words.mapToPair(新PairFunction(){
@凌驾
公共元组2调用(字符串s){
返回新的Tuple2(s,1);
}
});
在这段代码中,您看到的是实现的匿名类的实例化call
是该接口中应该实现的方法,@Override
表示该方法在接口中定义(而不是仅向正在实现的方法添加另一个方法)
注意:对于扩展抽象类,同样的语法也适用,尽管这里不是这样。PairFunction
是一个接口,它有一个名为call
的方法。这里发生的事情是,正在创建此接口的实现,并将其作为参数传递给words.mapToPair
如果您看到一种等效(但更详细)的方法来做同样的事情,那么理解起来可能会简单一些:
class PairFunctionImpl implements PairFunction<String, String, Integer> {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
}
JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunctionImpl());
类PairFunctionImpl实现PairFunction{
@凌驾
公共元组2调用(字符串s){
返回新的Tuple2(s,1);
}
}
javapairdd ones=words.mapToPair(新PairFunctionImpl());
您显示的代码在功能上与此相同,除了实现接口、创建实例并将此实例作为参数传递给words。mapToPair
通过匿名类在一个步骤中完成
@Override
注释告诉编译器检查调用
方法签名是否与PairFunction
接口中的定义匹配,这有以下好处:
- 提供防止打字错误的保护措施
- 通过使类中的哪些方法是在实现的接口或扩展类中定义的,从而提高代码可读性
在这种特殊情况下,您不会从@Override
中获得太多好处,因为即使没有它,您也会得到编译时错误(使用@Override
始终是可选的),但就我个人而言,我总是使用它。您有几个问题
“我知道它将匿名类作为参数传递(对吗?)”不完全是,匿名类没有被传递,传递的是上面定义的匿名类的一个实例,它实现了PairFunction
接口。稍后您将该对象称为抽象类,它也不是抽象类。不能构造(调用new
on)抽象类。您刚才实例化的类是具体的,而不是抽象的。只是匿名而已
call
:这是任何实现PairFunction
接口的类都必须实现的方法的名称。它的实际作用是一个火花问题,但我从java文档中收集到它触发了配对函数
@Override
:这是一个注释,用于指示您现在定义的方法覆盖父类中的实现。在这种情况下,您实际上并没有覆盖任何现有的实现,因为只有一个接口存在,但这是约定。注释对运行时执行没有影响。关于何时使用它的更多细节,我将向您介绍
这是一个函数名。查看PairFunction
接口并了解匿名内部类同样,PairFunction
是一个接口而不是抽象类@Dónal不知道我在看什么,但你是对的。据此编辑。谢谢