static 和 abstract 关键字可以在 java 中一起使用吗?

Can static and abstract keyword used together in java?

据我所知,static 和 final 的组合可以一起使用,但是 static 和 abstract 或 final 和 abstract 的组合在 java 中是不允许的。但是我在某些地方看到了如下代码

public class Enclosing {

    private static int x = 1;

    public static abstract class StaticNested {

        public abstract void run();
    }
  }

谁能解释一下这个场景的概念和实际用途。

staticabstract 可以一起用于 嵌套 classes, 例如

class A {
    static abstract class B {
        abstract void someMethod();
    }
}

B 是一个 static 嵌套 class 需要具体的子 class 来实现 someMethod() .

但不能一起用于方法,例如

static abstract void someMethod();  // compile error

当然 abstractfinal 不能一起使用 - 这样的组合是没有意义的。

static abstract class

的使用

static abstract class 的合适用途是用于只有您的 class 使用的类似节点的对象,例如 class 表示映射中的条目(例如 java.util.Map.Entry 是一个 interface,但可能是一个静态抽象 class),或者是一个 LinkedList 的节点的 class,但是实现留给封闭 class 的实现,它们本身也通过扩展它来使用和提供嵌套 class 的实现。