想法说
报告非静态内部类。此类的编译会导致在父类上创建隐藏的,包可见的方法,这可能会损害安全性。
所以我想知道这是什么意思。
演示代码
public class TaiquShortV2 implements Serializable {
private static final long serialVersionUID = 1L;
class TaiquData implements Serializable {//IDEA report TqiquData Class
private static final long serialVersionUID = 1L;
}
}
答案 0 :(得分:1)
我们必须区分源代码和JVM级别。
在源代码级别,内部类Inner
可以访问例如封闭类Enclosing
的私有字段。
在JVM级别上,没有内部类的概念:内部类只是一个具有特殊名称(通常包含$符号,例如Enclosing$Inner
)的独立类,位于内部。与Enclosing
类相同的软件包。与其他任何类一样,该Enclosing$Inner
类无法访问Enclosing
的私有字段。为了允许访问私有字段(根据源代码级别的要求),编译器扮演了一个骗局:它秘密地将getter和setter添加到字段中,而不使用合成名称(不是传统的getField()
和setField()
名称) ),并让内部类使用这些访问方法代替直接字段访问。而且,由于两个类都在同一个包中,因此访问方法至少需要包可见性,这就是编译器创建它们的方式。
因此,这些方法使同一包中声明的任何其他类都可以访问Enclosing
类的私有字段,从而打破了对私有字段的常规封装。
由您决定风险是否重要,因为在Java内部,还有其他可能性可以破坏访问规则。因此,从体系结构的角度来看,我个人总是很高兴在适当的地方创建内部类。
答案 1 :(得分:0)
内部类(非静态)与该类的任何其他属性或方法一样,它们可以访问其他成员。但是静态类没有此访问权限。 因此,可能是IDEA警告您,如果您不需要访问嵌套类中的其他成员,那么最好将其设置为静态。
请提供您的代码以对其进行更好的分析。
您还可以查看this thread