查看Web中的一些java示例代码,我遇到了以下语法:
public class WordCount {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//...
}
}
//...
}
来自C#后台,静态类无法从其他类继承,我对extends
类之后的Map
关键字感到有些困惑。扩展静态类是什么意思,它提供了哪些优势?
答案 0 :(得分:24)
静态修饰符在应用于类时,意味着c#和java中有两个非常不同的东西。 在c#中,类上的static修饰符强制使该类的所有成员静态。因此,在c#中:
但是,在java中,应用于类的静态修饰符意味着该类是嵌套它的类的静态成员,而不是它的成员必须是静态的。因此,在java:
中答案 1 :(得分:12)
Java中没有静态类(不像C#中那样)。这是一个 inner 嵌套类,静态属性意味着它可以在没有外部类的实例的情况下使用。
静态嵌套类可以像这样实例化:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
但是,需要创建与外部实例相关的非静态内部类:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
答案 2 :(得分:10)
在此上下文中,static表示Map类不需要实例化WordCount实例。
它与可继承无关(尽管是最终的关键字)