31

私は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;
    }
}

クラス名にエラーが表示されます。これがうまくいかない理由がわかりません。助けてください。ありがとうございました。

4

9 に答える 9

61

トップレベルの静的クラスを作成することはできません。それがコンパイラーがあなたに伝えようとしていることです。また、これが当てはまる理由については、こちらの回答もご覧ください。要点は次のとおりです。

静的に要約すると、クラスのインスタンスはそれ自体で立つことができます。または、その逆です。非静的内部クラス(=インスタンス内部クラス)は、外部クラスのインスタンスなしでは存在できません。トップレベルのクラスには外部クラスがないため、静的以外の何物でもありません。

すべてのトップレベルクラスは静的であるため、トップレベルクラス定義にstaticキーワードを含めることは無意味です。

于 2012-08-06T16:00:24.873 に答える
6

前の回答で述べたように、トップレベルのクラスで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
    }
}
于 2012-08-06T16:26:49.553 に答える
2

1. で使用static することはできませんPackage level.

2. クラスレベル内staticで可能です。

3.ただし、クラスが、の場合でも、クラスでstaticを使用inner classできます。(static inner class)、一般にトップレベルクラスとして知られています。

于 2012-08-06T16:11:40.457 に答える
2

トップレベルクラスは、定義上、すでにトップレベルであるため、静的と宣言しても意味がありません。そうすることはエラーです。コンパイラはこのエラーを検出して報告します。

于 2016-12-27T08:24:03.603 に答える
1

クラス定義から静的を削除します。ネストされたクラスのみを静的にすることができます。

クラスFavsPopupFragmentの場合; パブリック、アブストラクト、ファイナルのみが許可されます

于 2012-08-06T16:00:26.187 に答える
1

newキーワードを使用して静的クラスのインスタンスを作成することはできないと思います。これはとにかくフラグメントであるため、おそらく静的であってはなりません。

于 2012-08-06T16:00:41.243 に答える
1

トップレベルのクラスに修飾子を使用することはできませんが、キーワードstaticで変更できるネストされたクラスが存在する可能性があります。static

この場合、静的修飾子を削除するか、このクラスが別の最上位クラスにネストされていることを確認する必要があります。

追加情報

静的クラスのようなものはありません。この場合の静的修飾子(静的ネスト)は、ネストされたクラスが外部クラスの静的メンバーであることを示します。つまり、外部クラスのインスタンスがなくても、他の静的メンバーと同様にアクセスできます。

静的メソッドがクラスのインスタンス変数と非静的メソッドにアクセスできないのと同様に、静的にネストされたクラスは、外部クラスのインスタンス変数と非静的メソッドにアクセスできません。

于 2012-08-06T16:06:54.213 に答える
1
  • static内部クラスレベルで使用できます。static前に述べたように、トップレベルにすることはできません。 &のみpublicが許可されます。abstractfinal

  • static主にメソッドと変数のクラスレベル内で使用されます。

于 2013-03-25T05:55:55.040 に答える
0

トップレベルでサポートされているアクセス修飾子は次のとおりです。

1)パブリック

2)デフォルト

3)要約

4)決勝

5)strictfp。

理由:トップレベルクラス

staticキーワードは、オブジェクトを作成せずにメモリを提供し、ロジックを実行することを目的としているため、クラスには値ロジックが直接ありません。したがって、staticキーワードは外部クラスでは許可されておらず、主に上記のように、staticはパッケージレベルで使用できません。 。クラスレベル内でのみ使用されます。

于 2020-01-20T09:37:43.000 に答える