2012-01-18 3 views
1

У меня есть это предупреждение на большинстве моих классов и не уверен, почему это так. Это происходит как с обычными обычными классами, так и с конечными классами, которые имеют частные конструкторы, а некоторые нет конструктора. Я попытался изменить свои методы приватного класса на защищенные, не помогает.
Любые предложения о том, как отключить это?Класс '...' должен быть объявлен как «абстрактный». Checkstyle

Вот класс пример

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; 
    } 
} 
+3

Добавить код, вызывающий это предупреждение. Кстати, какую IDE вы используете? – MockerTim

+1

Найдите предупреждение в документации [Checkstyle documentation] (http://checkstyle.sourceforge.net/availablechecks.html), где он должен объяснить, почему вы это получили. – Jesper

+0

не уверен, но я бы подумал, что checstyle ищет, может ли класс быть реалистичным с помощью публичного конструирования, и если он не говорит себе «хорошо, он должен быть абстрактным классом, но он не был объявлен абстрактным, поэтому предупреждает пользователя ' –

ответ

3

Вы всегда можете обратиться к предупреждениям прочь, но они вообще здесь по причине :)

  • Вы намерены сделать их абстрактные классы? Если да, объявите их таким образом.
  • Вам понадобится создать экземпляр в какой-то момент? Если это так, добавьте публичный конструктор.

Я уверен, что это решит вашу проблему.

+0

Привет, Серебро, я не собираюсь иметь их как абстрактные классы. Я попробовал открытый конструктор, никаких изменений. – sonx

+0

Я удивлен, что это говорит о том, что вы делаете его абстрактным. Судя по вашему коду, я бы сделал его статичным. Это полезный класс, из того, что я понимаю. Нет необходимости в экземпляре, но только статические методы? Статический класс. Но это не ответ на вашу актуальную проблему. Я проверю документацию Checkstyle, но я никогда не наткнулся на вашу проблему. –

+1

Не внутренний класс не может быть статическим. –

3

Когда Checkstyle выдает предупреждение, в предупреждающем тексте должно быть указано короткое имя правила, которое позволит вам найти точное правильное правило, которое запускается. Например, «DesignForExtension».

Учитывая имя правила, вы можете посмотреть более подробную информацию о том, что это означает, что в документации Checkstyle: http://checkstyle.sourceforge.net/availablechecks.html

Post полные детали правила, которые инициированы и кто-то может быть в состоянии помочь.

+0

Предупреждение не содержит информации о предупреждении, типе или имени. Я попытался навести указатель мыши на предупреждение. Отображается только сообщение – sonx

+0

@sonx Я установил плагин Checkstyle для NetBeans. У меня также нет описания правил. – MockerTim

+1

Немного поиска приводит к [https://github.com/eclipse/jubula.core/tree/96522240c6e8c92a9e85ab0937db9b26fcc9fa19/org.eclipse.jubula.project.configuration], который предлагает a) это правило AbstractClassName, которое вы запускаете, и b), что вы, возможно, столкнулись с ошибкой в ​​Checkstyle. –

1

На sourceforge он говорит, что правило AbstractClassName использует следующее регулярное выражение:

^Abstract.*$|^.*Factory$ 

Это приводит к классам с именем, начинающимся с «Abstract» или заканчивающегося «Фабрика» будет помечено. Я получаю часть «Abstract ..», но почему все классы «..Factory» являются абстрактными? Иногда я создаю фабрики, которые используют зависимости для выполнения своей работы, поэтому мне нужен экземпляр для ввода.

Это, однако, не объясняет ваш случай. Я попробовал ваш примерный класс и не получил предупреждения Checkstyle (я использую подключаемый модуль Eclipse Checkstyle версии 5.3.0.201012121300).

Вы уверены, что получаете предупреждение AbstractClassName для этого класса? Какую версию Checkstyle вы используете?

+0

Может быть, здесь стоит добавить скриншот, но не знаю, как это сделать. любые рекомендации были бы полезны – sonx

+0

В Eclipse перейдите в Help -> About Eclipse SDK -> подробности установки -> Плагины и посмотрите версию плагина Checkstyle. Для предупреждения просто перепроверьте, что ваш класс действительно вызывает предупреждение AbstractClassName, а не какое-то другое предупреждение. –