I'm developing an android application but have hit a bit of a brick wall, I keep getting the error:
Illegal modifier for the class FavsPopupFragment; only public, abstract & final are permitted
This happened after following this answer to another SO question. Here is the code that I have:
package com.package.name;
/* Imports were here */
public static class FavsPopupFragment extends SherlockDialogFragment {
static FavsPopupFragment newInstance() {
FavsPopupFragment frag = new FavsPopupFragment();
return frag;
}
}
The error appears on the class name. I dont understand why this wont work, please help. Thank you.
You can't create a top level static class; that's what the compiler is trying to tell you. Also have a look at the answer here as to why this is the case. The gist is:
What the static boils down to is that an instance of the class can
stand on its own. Or, the other way around: a non-static inner class
(= instance inner class) cannot exist without an instance of the outer
class. Since a top-level class does not have an outer class, it can't
be anything but static.
Because all top-level classes are static, having the static keyword in
a top-level class definition is pointless.
As the previous answers stated, you can't use the static keyword in top level classes. But i wonder, why did you want it to be static?
Let me show you how a static / non static inner class is used in an example:
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
}
}
And from a completely different class:
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
}
}
A top-level class is by definition already top-level, so there is no point in declaring it static; it is an error to do so. The compiler will detect and report this error.
Remove static from class definition. Only nested classes can be static.
for the class FavsPopupFragment; only public, abstract & final are
permitted
I don't think you can create instances of a static class using the new keyword. This is a fragment anyway, so it probably should not be static anyway.
1. static
canNOT be used at Package level.
2. static
is possible within the Class level.
3. But you can still use static on a class, when the class is an inner class
, ie. (static inner class)
, commonly known as Top level class.
You cant use static
modifier for top level classes, though there can be nested classes which can be modified with static
keyword.
In this case either you need to remove the static modifier, or make sure this class nested into another top level class.
Extra info
There's no such thing as a static class. The static modifier in this
case (static nested) says that the nested class is a static member of the outer class.
That means it can be accessed, as with other static members, without
having an instance of the outer class.
Just as a static method does not have access to the instance variables
and nonstatic methods of the class, a static nested class does not
have access to the instance variables and nonstatic methods of the
outer class