【问题标题】:public static non-inner class in Java?Java中的公共静态非内部类?
【发布时间】:2012-06-27 08:30:03
【问题描述】:

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

静态在这里意味着什么,为什么它应该起作用? 为什么他用&lt;T &gt; 扩展Fragment?而不是正常的方式。

谢谢!

编辑: 哇,很快就有很多答案。 感谢所有在这里分享知识的人。

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

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

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

【问题讨论】:

  • 这个类肯定是inner

标签: java android class static


【解决方案1】:

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

例如,您可以通过以下方式实现ActionBar.TabListener,以便每个选项卡都使用自己的侦听器实例:

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

【讨论】:

  • 内部类根据定义是非静态的。你的意思是一个嵌套类。
【解决方案2】:

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

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

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

还要注意内部类是非静态嵌套类,所以静态类不能是内部类,只能是嵌套类。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      what static means here and why should it work?
      

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

      嗯,监听器通常对某些类是特殊的......所以为了凝聚力,最好将它们放在类本身中。

      why is him extending Fragment with 
      

      tablistener 必须在其自身中期待一个对象,该对象必须是 Fragment 的子类型。阅读泛型以了解更多信息。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-16
            • 1970-01-01
            • 2011-05-10
            • 1970-01-01
            • 2017-11-15
            • 1970-01-01
            相关资源
            最近更新 更多