当前位置: 首页 > 面试题库 >

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

王君墨
2023-03-14
问题内容

我有点困惑。我已经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/



 类似资料:
  • 问题内容: Java教程说,由于内部类与封闭类的实例相关联,所以它(内部类)本身不能定义任何静态成员。 对我来说很有趣,为什么内部类不能声明静态成员,例如某个字段,该内部类的实例可能会与同一内部类的其他实例共享这些成员?这仅仅是Java中必须被视为理所当然的事情的实现吗? 问题答案: 基本上只是一个任意决定。我们没有理由也 不可能 得到支持,但还算不上什么好的理由 来 支持它。只需在外部类中声明静

  • 我知道这个问题有点简单,但我真的想知道为什么不去留档,假设我有这样的课。 } 两个静态方法都抛出一个错误,指出 修饰符“静态”仅允许在常量变量声明中使用 我知道医生说 这在Java语言规范部分§8.1.3中有描述 8.1.3内部类和封闭实例 但我的问题是,调用简单值或属性与调用静态方法(无论是公共方法还是私有方法)有什么区别?。为什么可以调用属性,但不能调用方法。 谢谢

  • 问题内容: 我知道创建一个非静态内部类对象需要一个外部类对象,而创建的非静态内部类对象会自动具有对该外部类对象的隐藏引用。但是为什么非静态内部类不能具有静态成员呢?Java设计人员只需要禁止在内部类的静态方法内访问非静态外部类字段,这样做会更有意义,不是吗? 如果在内部类中具有静态成员没有意义,那么为什么内部类可以通过继承具有静态成员的类来继承静态成员? 我也读了这篇文章。如前所述: 内部类可以继

  • 我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object)  私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个

  • 问题内容: 在java中内部类和静态内部类有什么不同? 问题答案: 从Java教程: 嵌套类分为两类:静态和非静态。声明为静态的嵌套类简称为静态嵌套类。非静态嵌套类称为内部类。 静态嵌套类使用封闭的类名称访问: 例如,要为静态嵌套类创建一个对象,请使用以下语法: 作为内部类实例的对象存在于外部类实例中。考虑以下类别: InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访

  • 静态内部类是指使用 static 修饰的内部类。示例代码如下: 上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1) 在创建静态内部类的实例时,不需要创建外部类的实例。 2) 静态内部类中可以定义静态成员和实例成员。外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。 3) 静态内部类可以直接访问外部类的