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 答案标记为正确答案,因为他正确指出示例周围的文本表明该类是成员。

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

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

4

6 回答 6

3

无法将成员类声明为static- 它会发出编译器错误。你的例子关于一个成员类 - 引用你链接到的页面

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

所以页面声明,这TabListener 是一个成员类

于 2012-06-27T08:34:32.880 回答
2

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

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

所以你展示的代码只能是嵌套类,不能是顶级类。

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

于 2012-06-27T08:35:12.633 回答
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

这个类肯定是内部的。问号呢,它只是一个通用类型。这意味着这个类使用了一些扩展 Fragment 类型的类型。使用此类时,您只需说new TabListener<SomeTypeExtendingFragment>()

于 2012-06-27T08:34:46.143 回答
1

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

于 2012-06-27T08:37:32.457 回答
0

类是内部的。该关键字static只允许用于内部类。

于 2012-06-27T08:34:35.353 回答