Java 静态类的非法修饰符错误
我正在开发一个android应用程序,但遇到了一点困难,我不断得到错误:Java 静态类的非法修饰符错误,java,android,static,Java,Android,Static,我正在开发一个android应用程序,但遇到了一点困难,我不断得到错误: Illegal modifier for the class FavsPopupFragment; only public, abstract & final are permitted 这是继另一个SO问题之后发生的。以下是我的代码: package com.package.name; /* Imports were here */ public static class FavsPopupFragment
Illegal modifier for the class FavsPopupFragment; only public, abstract & final are permitted
这是继另一个SO问题之后发生的。以下是我的代码:
package com.package.name;
/* Imports were here */
public static class FavsPopupFragment extends SherlockDialogFragment {
static FavsPopupFragment newInstance() {
FavsPopupFragment frag = new FavsPopupFragment();
return frag;
}
}
错误出现在类名上。我不明白为什么这行不通,请帮忙。谢谢。您不能创建顶级静态类;这就是编译器想要告诉你的。还可以看看为什么会出现这种情况的答案。要点是: 静态的本质是类的一个实例可以 自立。或者,反过来说:一个非静态的内部类 没有外部类的实例,(=实例内部类)不能存在 班级。因为顶级类没有外部类,所以它不能 不能是静止的 因为所有顶级类都是静态的,所以在 顶级类定义是毫无意义的
从类定义中删除static。只有嵌套才能是静态的 对于类FavsPopupFragment;只有公共的、抽象的和最终的是 允许的
我认为不能使用new关键字创建静态类的实例。这是一个片段,所以它可能不应该是静态的 您不能对顶级类使用
static
修饰符,尽管可以使用static
关键字修改嵌套类
在这种情况下,您需要删除静态修饰符,或者确保该类嵌套到另一个顶级类中
额外信息
没有静态类这样的东西。此对话框中的静态修饰符
case(staticnested)表示嵌套类是外部类的静态成员。
这意味着可以像访问其他静态成员一样访问它,而无需
具有外部类的实例
正如静态方法不能访问实例变量一样
和类的非静态方法,静态嵌套类则不会
可以访问的实例变量和非静态方法
外层阶级
1。
静态
不能在包级别使用。
2.静态在类级别内是可能的。
3.但当类是内部类时,仍然可以在类上使用static,即(静态内部类)
,通常称为顶级类。正如前面的答案所述,不能在顶级类中使用static关键字。但我想知道,你为什么希望它是静态的
让我在一个示例中演示如何使用静态/非静态内部类:
public class A
{
public class B{}
public static class C{}
public static void foo()
{
B b = new B(); //incorrect
A a = new A();
A.B b = a.new B(); //correct
C c = new C(); //correct
}
public void bar()
{
B b = new B();
C c = new C(); // both are correct
}
}
来自完全不同的阶层:
public class D
{
public void foo()
{
A.B b = new A.B() //incorrect
A a = new A()
A.B b = a.new B() //correct
A.C c = new A.C() //correct
}
}
static
可以在内部类级别使用。顶层不能是静态的
,如前所述,只允许公共的
,抽象的
,最终的
static
主要用于类级别内的方法和变量
顶级类根据定义已经是顶级的,因此没有必要将其声明为静态的;这样做是错误的。编译器将检测并报告此错误。顶级are类支持的访问修饰符如下:
1)公开
2)默认值
3)摘要
4)决赛
5)严格限制
原因:顶级课程
由于static关键字用于提供内存和执行逻辑,而不创建对象,因此类没有直接的值逻辑,因此外部类不允许使用static关键字,主要如上所述,static不能在包级别使用。它只在类级别内使用。在这种情况下,您必须确保或强制自己将FavsPopupFragment
放在另一个类中。对我来说,我研究这个问题的原因是我来自C#/.Net,在那里可以有静态顶级类。尽管事实证明,“静态”在这两种技术中意味着两种不同的东西。