Java 类“…”必须声明为“抽象”。方格

Java 类“…”必须声明为“抽象”。方格,java,checkstyle,Java,Checkstyle,我在大多数课堂上都有这样的警告,不知道为什么会这样。这发生在公共普通类和最终类上,它们都有私有构造函数,有些根本没有构造函数。我尝试将我的私有类方法更改为protected,但没有帮助。有没有关于如何关闭此功能的建议 下面是一个课堂示例 public final class PlanBenefitManagerAssembler { private static final Logger LOGGER = Logger.getLogger(PlanBenefitManagerAssem

我在大多数课堂上都有这样的警告,不知道为什么会这样。这发生在公共普通类和最终类上,它们都有私有构造函数,有些根本没有构造函数。我尝试将我的私有类方法更改为protected,但没有帮助。有没有关于如何关闭此功能的建议

下面是一个课堂示例

public final class PlanBenefitManagerAssembler {

    private static final Logger LOGGER = Logger.getLogger(PlanBenefitManagerAssembler.class);

    /**
     * No Instance of the this class is allowed.
     */
    private PlanBenefitManagerAssembler() {

    }

    public static List<BenefitDecisionDetailsBean> assembleBenefitDecisionDetailsBean(
            List<BenefitDetails> benefitDecisionDetailsList, int relationalSequenceNumber) {

        LOGGER.debug("Enter assembleBenefitDecisionDetailsBean");
        List<BenefitDecisionDetailsBean> benefitDecisionDetailsBeanList = new ArrayList<BenefitDecisionDetailsBean>();

        for (BenefitDetails benefitDecisionDetails : benefitDecisionDetailsList) {
            BenefitDecisionDetailsBean benefitDecisionDetailsBean = new BenefitDecisionDetailsBean();
            benefitDecisionDetailsBean.setBenefitTypeCode(benefitDecisionDetails.getBenefitTypeCode());
            benefitDecisionDetailsBean.setRelationSequenceNumber(relationalSequenceNumber);
            benefitDecisionDetailsBean.setBenefitStatusDescription(
                    benefitDecisionDetails.getBenefitStatusDescription());
            benefitDecisionDetailsBean.setBenefitStatusCode(benefitDecisionDetails.getBenefitStatusCode());
            benefitDecisionDetailsBean.setBenefitUnderwritingStatusCode(
                    benefitDecisionDetails.getBenefitUnderwritingStatusCode());
            benefitDecisionDetailsBean.setBenefitUnderwritingStatusDescription(
                    benefitDecisionDetails.getBenefitUnderwritingStatusDescription());
            benefitDecisionDetailsBean.setBenefitChangeReasonCode(
                    String.valueOf(benefitDecisionDetails.getBenefitChangeReasonCode()));
            benefitDecisionDetailsBean.setBenefitChangeReasonDescription(
                    benefitDecisionDetails.getBenefitChangeReasonDescription());
            benefitDecisionDetailsBean.setComponentNumber(benefitDecisionDetails.getBenefitNumber());

            benefitDecisionDetailsBean.setBenefitVisible(benefitDecisionDetails.isExplicitBenefitDecisionRequired());

            benefitDecisionDetailsBean.setModelChanged(false);

            // * Set BenefitLoading and BenefitExclusion
            List<ExclusionDetailsBean> exclusionDetailsBeanList =
                    PlanBenefitManagerAssembler.assembleExclusionDetailsList(benefitDecisionDetails
                            .getBenefitExclusionsDetailsList().getBenefitExclusionsDetailsList());

            List<LoadingDetailsBean> loadingDetailsBeanList =
                    PlanBenefitManagerAssembler.assembleLoadingDetailsList(benefitDecisionDetails
                            .getBenefitLoadingsDetailsList().getBenefitLoadingsDetailsList());

            benefitDecisionDetailsBean.setExclusionDetailsBeanList(exclusionDetailsBeanList);
            benefitDecisionDetailsBean.setLoadingDetailsBeanList(loadingDetailsBeanList);

            benefitDecisionDetailsBeanList.add(benefitDecisionDetailsBean);         
        }

        LOGGER.debug("Exit assembleBenefitDecisionDetailsBean");

        return benefitDecisionDetailsBeanList;
    }
}

您可以随时关闭警告,但它们通常出现在此处是有原因的:

你打算让它们成为抽象类吗?如果是这样,就这样声明。 您需要在某个时候实例化它们吗?如果是,请添加公共构造函数。
我敢肯定这会解决您的问题。

您可以随时关闭警告,但它们出现在这里通常是有原因的:

你打算让它们成为抽象类吗?如果是这样,就这样声明。 您需要在某个时候实例化它们吗?如果是,请添加公共构造函数。
我很确定这将解决您的问题。

当Checkstyle生成警告时,警告文本应包含一个简短的规则名称,允许您查找正在触发的确切规则。例如,DesignForExtension

给定规则名称,您可以在Checkstyle文档中查找关于其含义的更多详细信息:


发布正在触发的规则的完整详细信息,可能有人可以提供帮助。

当Checkstyle生成警告时,警告文本应包含一个简短的规则名称,允许您查找正在触发的确切规则。例如,DesignForExtension

给定规则名称,您可以在Checkstyle文档中查找关于其含义的更多详细信息:

发布正在触发的规则的完整详细信息,可能有人可以提供帮助。

上面说AbstractClassName规则使用以下正则表达式:

^Abstract.*$|^.*Factory$
这会导致标记名称以“Abstract”开头或以“Factory”结尾的类。我得到了其中的“抽象”部分,但是为什么所有的“工厂”类都应该是抽象的呢?有时我创建的工厂使用依赖项来完成工作,所以我需要一个实例来注入

然而,这并不能解释你的情况。我尝试了您的示例类,但没有收到任何Checkstyle警告我正在使用Eclipse Checkstyle插件版本5.3.0.201012121300

您确定正在为此类获取AbstractClassName警告吗?您使用的是哪个版本的Checkstyle?

上面说AbstractClassName规则使用以下正则表达式:

^Abstract.*$|^.*Factory$
这会导致标记名称以“Abstract”开头或以“Factory”结尾的类。我得到了其中的“抽象”部分,但是为什么所有的“工厂”类都应该是抽象的呢?有时我创建的工厂使用依赖项来完成工作,所以我需要一个实例来注入

然而,这并不能解释你的情况。我尝试了您的示例类,但没有收到任何Checkstyle警告我正在使用Eclipse Checkstyle插件版本5.3.0.201012121300


您确定正在为此类获取AbstractClassName警告吗?您使用的是哪个版本的Checkstyle?

添加导致该警告的代码。顺便说一句,你在使用什么IDE?在应该解释为什么会出现这种情况的地方找到警告。不确定,但我认为checstyle正在查看该类是否可以用公共构造函数实例化,如果不是,则会对自己说“它必须是一个抽象类,但尚未声明为抽象类,所以让我们警告用户”@MockerTim:为什么IDE是否相关?Java代码是Java代码,Checkstyle是IDE不可知的。@sonx:您刚刚在两个IDE中启用了一组不同的规则。触发此警告的规则的名称是什么?您是否在Checkstyle文档中查找了它的描述?请添加导致该警告的代码。顺便说一句,你在使用什么IDE?在应该解释为什么会出现这种情况的地方找到警告。不确定,但我认为checstyle正在查看该类是否可以用公共构造函数实例化,如果不是,则会对自己说“它必须是一个抽象类,但尚未声明为抽象类,所以让我们警告用户”@MockerTim:为什么IDE是否相关?Java代码是Java代码,Checkstyle是IDE不可知的。@sonx:您刚刚在两个IDE中启用了一组不同的规则。触发此警告的规则的名称是什么?您在Checkstyle文档中查找过它的描述吗?嗨,Silver,我不打算将它们作为抽象类。我确实尝试过公共构造函数,没有改变。我很惊讶它建议你把它抽象化。根据你的代码判断,我会让它是静态的。据我所知,这是一个实用类。不需要实例,只提供静态方法?静态类。但这并不是你真正问题的答案。我将检查Checkstyle的文档,但我从未偶然发现您的问题。非内部类不能是静态的。我正在混合我的labguages。我的错。投票支持我指出明显的好消息

r、 嗨,西尔弗,我不打算把它们作为抽象类。我确实尝试过公共构造函数,没有改变。我很惊讶它建议你把它抽象化。根据你的代码判断,我会让它是静态的。据我所知,这是一个实用类。不需要实例,只提供静态方法?静态类。但这并不是你真正问题的答案。我将检查Checkstyle的文档,但我从未偶然发现您的问题。非内部类不能是静态的。我正在混合我的labguages。我的错。投赞成票给我,好的,先生。警告没有包括任何警告信息、类型或名称。我试着把鼠标悬停在警告上。只有信息是正确的displayed@sonx我已经为NetBeans安装了Checkstyle插件。我也没有任何规则描述。稍微搜索一下就会发现[这表明a您触发的是AbstractClassName规则,b您可能在Checkstyle中遇到错误。在NetBeans中使用Checkstyle.xml文件时,您有吗?我只熟悉Eclipse插件。@Tim我也在使用Eclipse是的,我有xml。我在svn上签入了代码,我会问我的同事是否没有他在他的WS上也是这样。可能是个错误。警告没有包括任何警告信息、类型或名称。我尝试将鼠标悬停在警告上。只有消息是错误的displayed@sonx我已经为NetBeans安装了Checkstyle插件。我也没有任何规则描述。稍微搜索一下就会发现[这表明a您触发的是AbstractClassName规则,b您可能在Checkstyle中遇到错误。在NetBeans中使用Checkstyle.xml文件时,您有吗?我只熟悉Eclipse插件。@Tim我也在使用Eclipse是的,我有xml。我在svn上签入了代码,我会问我的同事是否没有他在他的WS上也是这样。可能是个错误。也许是应该在这里添加一个屏幕截图,但不知道如何添加。任何指导原则都会对Eclipse有所帮助。转到“帮助”->“关于Eclipse SDK”->“安装详细信息”->“插件”并查找Checkstyle插件的版本。对于警告,只需重新检查您的类是否真的导致AbstractClassName警告,n其他一些警告。可能是应该在这里添加一个屏幕截图,但不知道如何添加。任何指导原则都会有帮助。在Eclipse中,转到“帮助”->“关于Eclipse SDK”->“安装详细信息”->“插件”并查找Checkstyle插件的版本。对于警告,只需重新检查您的类是否真的导致AbstractClassName警告,而不是其他警告呃警告。