【问题标题】:java access modifier knocking out each other?java访问修饰符互相淘汰?
【发布时间】:2019-04-02 04:25:48
【问题描述】:

目前我正在使用 SDK 19 使用 Android Studio 3 开发一个 android 项目。我的个人目标是生成几乎没有警告的代码以提高我的代码质量。

在为我的RecyclerView 设置RecyclerViewAdapter 并以ViewHolder 作为内部类时,我遇到了Android Studio 的这种奇怪行为,它标志着我的ViewHolder 的访问权限可以是私有的。但是,当我这样做时,我的 RecyclerView.Adapter 类的声明中已经出现错误。知道我做错了什么吗?

这是我ErrorCompactAdapter的骨架结构:

public class ErrorCompactAdapter extends RecyclerView.Adapter<ErrorCompactAdapter.ErrorCompactViewHolder> {

    //fields and attributes
    //cotr
    //onCreateViewHolder
    //onBindViewHolder
    //getItemCount

    protected class ErrorCompactViewHolder extends RecyclerView.ViewHolder {

        //outlets
        //cotr

    }
}

警告明确指出,ErrorCompactViewHolder 的访问权限可以是私有的。如果我更改此设置,我会收到一条错误消息,指出 ErrorCompactAdapter.ErrorCompactViewHolder has a private access in ErrorCompactAdapter。这有点令人困惑,你能想象吗?任何想法,如果我在某个地方给自己挖了一个陷阱洞?谢谢转发。

【问题讨论】:

  • 你确定它说它可以是private,而不是package-private
  • @VladyslavMatviienko 这确实是我没有看到的一点。它说包私有

标签: android android-adapter access-modifiers android-viewholder


【解决方案1】:

Android Studio 建议你将ErrorCompactViewHolder 的访问修饰符改为package-private,而不是private,这个区别很大。
Package-private 是 Java 中的默认访问修饰符,这意味着该类将在其包的范围内可用。

要赋予类默认(包私有)访问修饰符,您需要完全删除访问修饰符。

【讨论】:

    【解决方案2】:

    它应该是私有静态字段吗?

    【讨论】:

    • 它应该不是静态的。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多