据我研究过,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回答了那个,但我无法标记两个正确答案。
答案 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
仅允许用于内部类。