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


问题内容

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

 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抱怨

有任何想法吗?


问题答案:

直接回答您的问题:

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

完全是真的。这不是错误,错误消息甚至没有误导。

  1. 我听说将嵌套类用作静态方法更好,这样您就不会浪费引用

你是绝对正确的。

  1. 为您提供的解决方案:

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


一般讨论;一般交流

Java和Android都支持您可以声明static内部类/成员/函数, 该类应该是父类。您不能在内部类中执行此操作。

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

你能拥有什么?

class Main 
    static class Adapter
        static class Holder

要么

class Adapter
    static class Holder

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

为什么?

引用另一个答案,这是因为内部类与其外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用来使用它们,因此在静态嵌套类中声明静态方法是安全的。

关于该主题的进一步阅读

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/