1

私が調べた限りでは、Java の静的クラスはそれが内部クラスである場合にのみ意味があります。

しかし、私はこの例に出くわしたばかりで、作者が何を意味し、何をし、どのように機能するかを理解したいと思っています:

から: http://developer.android.com/guide/topics/ui/actionbar.html

    public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
        // a normal class with public constructor and TabListener methods
        ...
    }

ここで静的とは何を意味し、なぜそれが機能する必要があるのですか? そして、なぜ彼は Fragment を で拡張しているの<T >ですか? 通常の方法の代わりに。

ありがとう!

編集: うわー、それは非常に多くの答えでした。ここで知識を共有してくれたすべての人に感謝します。

例の周りのテキストがこのクラスがメンバーであることを示していることを彼が正しく指摘したので、@npe の回答を正しいものとしてマークします。

また、スタック オーバーフローに関するいくつかの奇妙な書式設定があり、元の質問を修正してここで繰り返します<T >

そして@Ahmadはそれに答えましたが、2つの正解をマークすることはできません.

4

6 に答える 6

3

メンバー クラスを次のように宣言する方法はありませんstatic。コンパイラ エラーが発生します。そして、あなたの例メンバークラスに関するものです-あなたがリンクしたページを引用します:

たとえば、各タブがリスナーの独自のインスタンスを使用するようにActionBar.TabListenerを実装する方法を次に示します。

そのため、ページには、TabListener がメンバークラスであると記載されています。

于 2012-06-27T08:34:32.880 に答える
2

Java 言語仕様に従って、クラスのコンテキストで:

修飾子 static はメンバー クラス (§8.5.1) にのみ関係し、トップ レベル、ローカル、または匿名クラスには関係しません。

したがって、表示するコードはネストされたクラスのみにすることができ、トップレベルのクラスにすることはできません。

また、内部クラスは静的ではないネストされたクラスであるため、静的クラスは内部クラスになることはできず、ネストされたクラスのみであることに注意してください。

于 2012-06-27T08:35:12.633 に答える
1

このクラスは間違いなく内部でなければなりません。疑問符はどうですか、それは単なるジェネリック型です。これは、このクラスが Fragment 型を拡張した型を使用していることを意味します。このクラスを使用するときは、単に次のように言いますnew TabListener<SomeTypeExtendingFragment>()

于 2012-06-27T08:34:46.143 に答える
1
what static means here and why should it work?

内部クラスを静的にしない場合は、囲んでいるクラスのインスタンスが必要です。.

まあ、リスナーは通常、いくつかのクラスに固有です...したがって、結束のために、それらをクラス自体に含めることをお勧めします。

why is him extending Fragment with 

tablistener は、 Fragment のサブタイプでなければならないオブジェクトを想定している必要があります。詳細については、ジェネリックについてお読みください。

于 2012-06-27T08:31:49.793 に答える
1

通常、リスナーを実装するときは、 を使用しますthis。ただし、この場合、特定の に固有のリスナーの内部Tabクラスを作成しました。静的クラスとは、親クラスのインスタンスを作成するのではなく、直接アクセスして作成されることを意味するため、直接インスタンス化することがわかりますTabListener。また、独立したエンティティであるため、独立したクラスであるかのように見えます。(実際、static別のファイルでなくても定義できます。)

于 2012-06-27T08:37:32.457 に答える
0

クラスはインナーです。キーワードstaticは、内部クラスに対してのみ許可されます。

于 2012-06-27T08:34:35.353 に答える