介绍
总体说明
checkstyle可以使用FinalClass检查应该被定为final的类。如果违反了,就会报违反项:
https://checkstyle.sourceforge.io/checks/design/finalclass.html
checkstyle规则集文件对FinalClass模块的配置:
哪些类可以被定义final的
原则是不允许被继承的类用final修饰。
在具体判定方法上,checkstyle认为如下类要用final修饰:
- 一个类只包含private的构造函数。
下面的类会被checkstyle跳过:
- 是匿名内部类的父类。
示例
只有匿名构造函数的类被定义为final的—checkstyle检查通过
只有匿名构造函数的类没有被final修饰—checkstyle检查报违反项
一个类有一个private构造函数和一个public构造函数,不被定义为final的—checkstyle检查通过
下面的类Parent有一个private构造函数,和一个public构造函数,所以不需要定义为final的:
package com.thb;
public class Parent {
/**
* 整型字段.
*/
private int field1;
/**
* 字符串字段.
*/
private String filed2;
/**
* 构造函数.
* @param value
*/
public Parent(final String value) {
this.filed2 = value;
this.field1 = 0;
}
/**
* 私有构造函数.
* @param value
*/
private Parent(int value) {
this.field1 = value;
this.filed2 = "hello";
}
}
是匿名内部类的父类,不被定义为final的—checkstyle检查通过
外部类只有private构造函数,含有匿名内部类,但不是该匿名内部类的父类,外部类定义为final的—checkstyle检查通过
下面的父类只含有private的构造函数,含有一个匿名内部类,但不是该匿名内部类的父类,所以父类要被定义为final的:
外部类只有private构造函数,含有匿名内部类,但不是该匿名内部类的父类,外部类没有定义为final的—checkstyle检查报违反项
下面的父类只含有private的构造函数,含有一个匿名内部类,但不是该匿名内部类的父类,父类没有定义为final的,checkstyle检查报违反项:
接口中的嵌套类只有private构造函数,该嵌套类没有定义为final的—checkstyle检查报违反项
接口中的嵌套类只有private构造函数,该嵌套类定义为final的—checkstyle检查通过
注解中的嵌套类只有private构造函数,该嵌套类没有定义为final的—checkstyle检查报违反项