RecyclerView: Inner classes cannot have static declaration

前端 未结 2 873
灰色年华
灰色年华 2020-12-16 17:52

I am a little confused. I\'ve set up a RecyclerView as per the tutorial on google/android site and I get the following error:

 Inner classes can         


        
相关标签:
2条回答
  • 2020-12-16 18:16

    You could also simply implement ItemViewAdapter as a static class

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

    That should take care of the error

    0 讨论(0)
  • 2020-12-16 18:31

    Straight to your questions:

    1. Inner classes cannot have static declaration

      That's completely true. This is not a bug, and the error message is not even misleading.

    2. I hear its better to use nested class as a static so you are not wasting a reference

      You are absolutely correct.

    3. Solution for you:

      Create a new class(File) in your project for ItemsViewAdapter and there won't be such an error.


    General Discussion

    Java and Android both supports that you can declare static inner classes/members/functions, BUT that class should be a parent class. You cannot do that inside an inner class.

    I.e., class Main can have static class Adapter but if the Adapter class is an inner class of Main is not static then it can't have its own static inner class/member.

    What You Can Have?

    class Main 
        static class Adapter
            static class Holder
    

    Or

    class Adapter
        static class Holder
    

    If you want to declare any member of class as static then the immediate parent class must be the top-level, main class in that file.

    Why?

    Quoting another answer, 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.

    Further Reading on the Topic

    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/

    0 讨论(0)
提交回复
热议问题