Java中的公共静态非内部类?

时间:2012-06-27 08:30:03

标签: java android class static

据我研究过,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
        ...
    }

静态意味着什么,它为什么要起作用? 为什么他用<T >扩展片段?而不是正常的方式。

谢谢!

修改 哇,这很快就得到了很多答案。 感谢所有在这里分享知识的人。

我会将@npe的答案标记为正确答案,因为他正确地指出示例周围的文字表明该类是其成员。

还有一些奇怪的堆栈溢出格式,我刚刚修复了原来的问题,并在这里重复: 为什么他用<T >扩展Fragment?

和@Ahmad回答了那个,但我无法标记两个正确答案。

6 个答案:

答案 0 :(得分:3)

无法将成员类声明为static - 它将发出编译器错误。 您的示例 关于成员类 - 引用the page you linked to

  

例如,以下是如何实现ActionBar.TabListener以使每个选项卡使用自己的侦听器实例:

因此页面指出TabListener 是成员类

答案 1 :(得分:2)

根据Java Language Specification,在类的上下文中:

  

修饰符static仅适用于成员类(第8.5.1节),不适用于顶级或本地或匿名类。

因此,您展示的代码只能是嵌套类,它不能是顶级类。

另请注意,内部类是非静态嵌套类,因此静态类不能是内部类,只能是嵌套类。

答案 2 :(得分:1)

what static means here and why should it work?

如果不使内部类静态,则需要一个封闭类的实例。

好吧,听众对某些课程通常是特别的......所以为了凝聚力,将它们放在课堂本身是件好事。

why is him extending Fragment with 

tablistener必须期望它的一个对象必须是Fragement的子类型。阅读泛型以了解更多信息。

答案 3 :(得分:1)

这门课肯定是内心的。 关于问号的问题,它只是一种通用类型。这意味着该类使用一些扩展Fragment类型的类型。使用此课程时,您只需说出new TabListener<SomeTypeExtendingFragment>()

答案 4 :(得分:1)

通常当我们实现一个监听器时,我们使用this。但是,在这种情况下,他们为侦听器创建了一个特定于Tab内部类。静态类意味着直接访问和创建它,而不是通过创建父类的实例,因此您可以看到它们直接实例化TabListener。它也是一个独立的实体,所以它看起来好像是一个独立的类。 (实际上,您可以在另一个文件中定义它而不需要static。)

答案 5 :(得分:0)

班级是内在的。关键字static仅允许用于内部类。