对于静态类非法修改错误(Illegal modifier error for static clas

2019-06-26 19:42发布

我开发一个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;
    }
}

在类名出现错误。 我不明白为什么这不会工作,请帮助。 谢谢。

Answer 1:

您不能创建一个顶级静态类; 这就是编译器是想告诉你。 也有看答案在这里 , 为什么是这种情况。 要点是:

什么是静态归结为是类的一个实例可以站在自己的。 或者,反过来:一个非静态内部类(=实例内部类)不能没有外类的实例存在。 由于顶级类不具有外部类,它不能是什么,但静态的。

因为所有顶级类是静态的,具有在顶层类定义静态关键字是毫无意义的。



Answer 2:

由于以前的答案说,你不能使用在顶级类的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
    }
}


Answer 3:

一个顶级类是通过定义已经顶层,所以在声明为静态毫无意义; 它是这样做的一个错误。 编译器将检测和报告此错误。



Answer 4:

卸下类定义静态的。 只有嵌套类可以是静态的。

为类FavsPopupFragment; 只有公共的,抽象的和最终被允许



Answer 5:

我不认为你可以创建使用new关键字的静态类的实例。 这是一个片段,无论如何,所以它可能不应该是静态的反正。



Answer 6:

1. static 不能被用来Package level.

2. static 能够类水平内。

3.但是,你仍然可以使用静态类上 ,当类是一个inner class ,即。 (static inner class) ,通常被称为顶层类。



Answer 7:

你不能用static的顶级类改性剂,虽然有可以嵌套可与修改类static关键字。

在这种情况下,要么你需要删除static修饰符,或者确保这个类嵌套到另一个顶层类。

额外的信息

有一个静态类没有这样的事情。 在这种情况下(静态嵌套)static修饰符说,嵌套类是外部类的静态成员。 这意味着它可以被访问,作为与其它静态成员,而无需外部类的一个实例。

就像一个静态方法不能访问的实例变量和类的非静态方法,静态嵌套类不具有访问实例变量和外部类的非静态方法



Answer 8:

  • static可以在内部类级别被使用。 顶级不能static ,如前面所说,只有publicabstractfinal被允许的。

  • static主要用于类级别的方法和变量里面。



文章来源: Illegal modifier error for static class