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이 클래스가 public construcor로 인스턴스화 가능한지를보고 있다고 생각합니다. 그렇다고하지 않는다면 추상 클래스 여야합니다. 아직 추상적으로 선언되지 않았으므로 사용자에게 경고 할 수 있습니다. ' –

답변

3

하지만 그들은 일반적 이유가 여기에 있습니다 :

  • 은 당신이 그들을 추상 클래스 만들 계획입니까? 그렇다면 그렇게 선언하십시오.
  • 어느 시점에서 인스턴스화해야합니까? 그렇다면 공용 생성자를 추가하십시오.

저는 이것이 당신의 문제를 해결할 것이라고 확신합니다.

+0

안녕 실버, 나는 그들을 추상적 인 수업으로 생각하지는 않습니다. 나는 public 생성자를 시도했지만 아무런 변화가 없었다. – sonx

+0

나는 당신이 그것을 추상적으로 만들 것을 제안하는 것에 놀랐다. 귀하의 코드로 판단하면, 나는 그것을 정적으로 만들 것입니다. 내가 이해하는 유틸리티 클래스입니다. 필요한 인스턴스가 없으며 정적 메서드 만 제공합니까? 정적 클래스입니다. 그러나 그것은 실제 문제에 대한 답이 아닙니다. Checkstyle의 문서를 확인하겠습니다. 그러나 문제가 발생하지 않았습니다. –

+1

비 내부 클래스는 정적 일 수 없습니다. –

3

Checkstyle에서 경고가 발생하면 경고 텍스트에 트리거되는 정확한 규칙을 찾을 수있는 간단한 규칙 이름이 포함되어야합니다. "DesignForExtension", 예를 들면.

규칙 이름을 감안할 때, 당신은이 Checkstyle 설명서에 무엇을 의미하는지에 대한 자세한 내용을 찾아 볼 수 있습니다 : 규칙의 http://checkstyle.sourceforge.net/availablechecks.html

포스트 전체 세부 사항은 트리거되고 누군가는 도움을 줄 수 있습니다. sourceforge

+0

경고에는 경고 정보, 유형 또는 이름이 포함되어 있지 않습니다. 경고 위로 마우스를 가져 가려고했습니다. 메시지 만 표시됩니다. – sonx

+0

@sonx NetBeans 용 Checkstyle 플러그인을 설치했습니다. 또한 규칙 설명이 없습니다. – MockerTim

+1

약간의 검색을하면 [https://github.com/eclipse/jubula.core/tree/96522240c6e8c92a9e85ab0937db9b26fcc9fa19/org.eclipse.jubula.project.configuration]이 나타납니다. 이는 a) 트리거하는 AbstractClassName 규칙이고 b) 당신은 Checkstyle의 버그를 발견했을 것입니다. –

1

IT는 AbstractClassName 규칙은 다음과 같은 정규식을 사용하여 말한다 :

^Abstract.*$|^.*Factory$ 

이 '추상'로 시작하거나 플래그가 지정하는 '공장'로 끝나는 이름을 가진 클래스를 야기한다. 나는 그것의 '추상 ..'부분을 얻었지만 왜 모든 '.. 팩토리'클래스는 추상적이어야 하는가? 때로는 종속성을 사용하여 작업을 수행하는 팩토리를 작성하므로 인스턴스를 주입해야합니다.

그러나 여기에는 사례가 설명되어 있지 않습니다. 귀하의 예제 클래스를 시도하고 어떤 Checkstyle 경고 (나는 이클립스 Checkstyle 플러그인 버전 5.3.0.201012121300를 사용하고있다)을 얻지 않았다.

이 클래스에 대한 AbstractClassName 경고가 표시됩니까? Checkstyle의 어떤 버전을 사용하고 있습니까?

+0

여기에 스크린 샷을 추가해야하지만 어쩌면 해야할지 모르겠군요. 모든 지침이 도움이 될 것입니다. – sonx

+0

Eclipse에서 도움말 -> Eclipse SDK 정보 -> 설치 정보 -> 플러그인으로 이동하여 Checkstyle 플러그인의 버전을 찾습니다. 경고를 위해 클래스가 실제로 다른 클래스의 경고가 아닌 AbstractClassName 경고를 발생시키는 지 다시 확인하십시오. –

관련 문제