我开发一个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 extends SherlockDialogFragment {
static FavsPopupFragment newInstance() {
FavsPopupFragment frag = new FavsPopupFragment();
return frag;
}
}
在类名出现错误。 我不明白为什么这不会工作,请帮助。 谢谢。
您不能创建一个顶级静态类; 这就是编译器是想告诉你。 也有看答案在这里 , 为什么是这种情况。 要点是:
什么是静态归结为是类的一个实例可以站在自己的。 或者,反过来:一个非静态内部类(=实例内部类)不能没有外类的实例存在。 由于顶级类不具有外部类,它不能是什么,但静态的。
因为所有顶级类是静态的,具有在顶层类定义静态关键字是毫无意义的。
由于以前的答案说,你不能使用在顶级类的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
}
}
一个顶级类是通过定义已经顶层,所以在声明为静态毫无意义; 它是这样做的一个错误。 编译器将检测和报告此错误。
卸下类定义静态的。 只有嵌套类可以是静态的。
为类FavsPopupFragment; 只有公共的,抽象的和最终被允许
我不认为你可以创建使用new关键字的静态类的实例。 这是一个片段,无论如何,所以它可能不应该是静态的反正。
1. static
不能被用来Package level.
2. static
能够类水平内。
3.但是,你仍然可以使用静态类上 ,当类是一个inner class
,即。 (static inner class)
,通常被称为顶层类。
你不能用static
的顶级类改性剂,虽然有可以嵌套可与修改类static
关键字。
在这种情况下,要么你需要删除static修饰符,或者确保这个类嵌套到另一个顶层类。
额外的信息
有一个静态类没有这样的事情。 在这种情况下(静态嵌套)static修饰符说,嵌套类是外部类的静态成员。 这意味着它可以被访问,作为与其它静态成员,而无需外部类的一个实例。
就像一个静态方法不能访问的实例变量和类的非静态方法,静态嵌套类不具有访问实例变量和外部类的非静态方法