是否允许在 Java 中将顶级 class 声明为静态
is it allowed to declared top level class as static in Java
刚开始接触Akka框架,在他们的documentation中看到了如下一段代码。有人可以解释这段代码吗?
是否允许将顶级 class 声明为静态?
我找到了一个有 similar 问题的帖子。它说顶级 class 不能在 Java 中声明为静态,但在这个例子中顶级代码已被声明为静态!我错过了什么吗?
static class MyActorC implements Creator<MyActor> {
@Override public MyActor create() {
return new MyActor("...");
}
}
Props props2 = Props.create(MyActor.class, "...");
Props props3 = Props.create(new MyActorC());
没有。
只有 class 位成员可以成为 static
。成员包括fields
、methods
、nested classes
、enums
...等
但是 class(顶层)本身不能是静态的(静态也没有意义)。
在您提到的documentation中,他们没有提到MyActorC
是顶级class, 有吗? (如果您观察到,导入语句位于不同的代码片段中)。
我认为您忽略了这些是代码片段这一事实。您也不能在根级别执行 Props props2 = Props.create(MyActor.class, "...");
。该代码属于一个方法。
没有,
这不被允许。
顶层支持的访问修饰符是 class 如下:
1) public
2)
3) 摘要
4) 决赛
5) strictfp.
原因:顶级class
因为static关键字是为了提供内存和执行逻辑而不创建对象,所以class不直接有值逻辑,所以static关键字不允许用于外部class和主要如上所述,静态不能在包级别使用。仅在Class级别内使用。
刚开始接触Akka框架,在他们的documentation中看到了如下一段代码。有人可以解释这段代码吗?
是否允许将顶级 class 声明为静态?
我找到了一个有 similar 问题的帖子。它说顶级 class 不能在 Java 中声明为静态,但在这个例子中顶级代码已被声明为静态!我错过了什么吗?
static class MyActorC implements Creator<MyActor> {
@Override public MyActor create() {
return new MyActor("...");
}
}
Props props2 = Props.create(MyActor.class, "...");
Props props3 = Props.create(new MyActorC());
没有。
只有 class 位成员可以成为 static
。成员包括fields
、methods
、nested classes
、enums
...等
但是 class(顶层)本身不能是静态的(静态也没有意义)。
在您提到的documentation中,他们没有提到MyActorC
是顶级class, 有吗? (如果您观察到,导入语句位于不同的代码片段中)。
我认为您忽略了这些是代码片段这一事实。您也不能在根级别执行 Props props2 = Props.create(MyActor.class, "...");
。该代码属于一个方法。
没有, 这不被允许。 顶层支持的访问修饰符是 class 如下:
1) public
2)
3) 摘要
4) 决赛
5) strictfp.
原因:顶级class
因为static关键字是为了提供内存和执行逻辑而不创建对象,所以class不直接有值逻辑,所以static关键字不允许用于外部class和主要如上所述,静态不能在包级别使用。仅在Class级别内使用。