RecyclerView:内部类不能有静态声明

时间:2015-08-12 04:56:32

标签: java android android-recyclerview

我有点困惑,我根据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 {
           ...
       }

为什么我要发现这个错误,我听说最好使用嵌套类作为静态,这样你就不会浪费一个引用,但当前版本的android studio正在抱怨

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:12)

直接提出问题:

  1.   

    内部类不能有静态声明

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

  2.   

    我听说最好将嵌套类用作静态,这样你就不会浪费引用

    你是完全正确的。

  3. 为您解决方案:

    在项目中为ItemsViewAdapter创建一个新类(文件),但不会出现这样的错误。

  4. 一般性讨论

    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/

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

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

答案 1 :(得分:-1)

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

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

那应该处理错误