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抱怨
有任何想法吗?
问题答案:
直接回答您的问题:
-
内部类不能具有静态声明
完全是真的。这不是错误,错误消息甚至没有误导。
-
我听说将嵌套类用作静态方法更好,这样您就不会浪费引用
你是绝对正确的。
- 为您提供的解决方案:
在您的项目中创建一个新的类(文件),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/