java访问修饰符互相淘汰?

java access modifier knocking out each other?

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

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

这是我的骨架结构 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。这有点令人困惑,你能想象吗?知道吗,如果我在某个地方给自己挖了一个陷阱洞?感谢转发。

应该是私有静态字段吗?

Android Studio 建议您将 ErrorCompactViewHolder 的访问修饰符更改为 package-private,而不是 private,差别很大。
包私有是 Java 中的默认访问修饰符,这意味着 class 将在其包的范围内可用。

要提供 class 默认(包私有)访问修饰符,您需要完全删除访问修饰符。