【问题标题】:RecyclerView: Inner classes cannot have static declarationRecyclerView:内部类不能有静态声明
【发布时间】:2015-11-04 12:55:42
【问题描述】:

我有点困惑。我已经按照 google/android 网站上的教程设置了 RecyclerView,但出现以下错误:

 Inner classes cannot have static declaration

当然,我确实有一个嵌套的静态类,但这是 android/google 定义的。

  public class ItemsViewAdapter extends RecyclerView.Adapter<ItemsViewAdapter.ViewHolder> {
       // ... 
       // ...
       public static class ViewHolder extends RecyclerView.ViewHolder {
           // ...
       }

为什么会出现此错误?我听说最好将 static 用于嵌套类,这样您就不会浪费参考,但当前版本的 android studio 抱怨

有什么想法吗?

【问题讨论】:

标签: java android android-recyclerview


【解决方案1】:

直接回答你的问题:

  1. 内部类不能有静态声明

    完全正确。这不是错误,错误消息甚至没有误导性。

  2. 我听说使用嵌套类作为静态类更好,这样你就不会浪费引用

    你说的很对。

  3. 为您解决方案:

    在你的项目中为ItemsViewAdapter新建一个类(File),就不会出现这样的错误了。


一般性讨论

Java 和 Android 都支持您可以声明 static 内部类/成员/函数,但是该类应该是父类。你不能在内部类中这样做。

即,class Main 可以有 static class Adapter,但如果 Adapter 类是 Main 的内部类不是静态的,则它不能有自己的静态内部类/成员。

你能拥有什么?

class Main 
    static class Adapter
        static class Holder

或者

class Adapter
    static class Holder

如果要将类的任何成员声明为static,则直接父类必须是该文件中的顶级主类。

为什么?

引用另一个答案,It's because an inner class is implicitly associated with an instance of its outer class, it cannot define any static methods itself. Since a static nested class cannot refer directly to instance variables or methods defined in its enclosing class, it can use them only through an object reference, it's safe to declare static methods in a static nested class.

进一步阅读该主题

1 http://www.geeksforgeeks.org/inner-class-java/

2http://www.javaworld.com/article/2077372/learn-java/static-class-declarations.html

3http://viralpatel.net/blogs/inner-classes-in-java/

【讨论】:

  • 不错!很好的解释!谢谢。
  • '静态内部类/成员/函数'在术语上是一个多重矛盾。
【解决方案2】:

您也可以简单地将 ItemViewAdapter 实现为静态类

public static class ItemsViewAdapter extends RecyclerView.Adapter<ItemsViewAdapter.ViewHolder> {
    ... 
    ...
   public static class ViewHolder extends RecyclerView.ViewHolder {
       ...
   }

这应该解决错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2013-10-29
    • 2016-04-17
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多