문제

DataFlowanomalyanalysis : 변수 '변수'(lines 'n1'-'n2')에 대한 'dd'-anomaly를 찾았습니다.

DataFlowanomalyanalysis : 변수 '변수'(lines 'n1'-'n2')에 대한 'du'-anomaly를 찾았습니다.

DD와 DU Sound는 친숙합니다 ... 가장 약한 사전 및 사후 조건과 관련된 테스트 및 분석과 같은 것들에서 말하고 싶습니다. 그러나 세부 사항을 기억하지 못합니다.

NullAssignment : NULL에 객체를 할당하는 것은 코드 냄새입니다. 리팩토링을 고려하십시오.

객체를 설정하지 않을 것입니다 null 객체가 로컬 객체 인 경우 (방법 외부에서 사용되지 않음) 쓰레기 수집을 지원합니까? 아니면 신화입니까?

MethodArgumentCouldBefinal : Parameter 'Param'이 할당되지 않았으며 최종 선언 될 수 있습니다.

LocalVariableCouldBefinal : 로컬 변수 '변수'가 최종 선언 될 수 있습니다.

사용하는 장점이 있습니까? final 매개 변수와 변수?

LooseCoupling : 'LinkedList'와 같은 구현 유형 사용을 피하십시오. 대신 인터페이스를 사용하십시오

내가 구체적으로 필요하다는 것을 알고 있다면 LinkedList, 왜 미래의 개발자들에게 의도를 명확하게 명확하게하기 위해 하나를 사용하지 않겠습니까? 의미가있는 수업 경로에서 가장 높은 수업을 반환하는 것이 한 가지이지만 왜 내 변수를 가장 엄격한 의미라고 선언하지 않겠습니까?

회피 확인 : 메소드 레벨 동기화 대신 블록 레벨 사용

블록 레벨 동기화는 메소드 레벨 동기화와 어떤 장점이 있습니까?

피하기 hotttype : 짧은 유형을 사용하지 마십시오

내 첫 언어는 C와 C ++이지만 Java 세계에서는 왜 내 데이터를 가장 잘 설명하는 유형을 사용해서는 안됩니까?

도움이 되었습니까?

해결책

  • DD와 DU 이상 (올바르게 기억한다면 - FindBugs를 사용하고 메시지가 약간 다릅니다)는 읽지 않은 로컬 변수에 값을 할당하는 것을 말합니다. 일반적으로 읽기 전에 다른 값을 재 할당하기 때문입니다. 일반적인 경우는 일부 변수를 초기화하는 것입니다 null 선언 될 때. 필요할 때까지 변수를 선언하지 마십시오.

  • 할당 null 가비지 수집가를 "지원"하기 위해 로컬 변수에게는 신화입니다. PMD는 이것이 단지 비생산적인 혼란임을 알리고 있습니다.

  • 로컬 변수에 최종 지정 ~해야 한다 최적화기에 매우 유용하지만,이 힌트를 이용하는 현재 지아의 구체적인 예는 없습니다. 나는 그것이 내 코드의 정확성에 대해 추론하는 데 유용하다는 것을 알았습니다.

  • 측면에서 인터페이스 지정… 음, 인터페이스 훌륭한 디자인 연습입니다. 발신자에게 전혀 영향을 미치지 않고 컬렉션 구현을 쉽게 변경할 수 있습니다. 그것이 바로 인터페이스의 모든 것입니다.

  • 발신자가 할 수있는 많은 경우를 생각할 수 없습니다. 필요하다LinkedList, 일부 인터페이스에서 선언하지 않는 API를 노출시키지 않기 때문입니다. 클라이언트가 해당 API에 의존하는 경우 올바른 인터페이스를 통해 사용할 수 있습니다.

  • 블록 레벨 동기화를 통해 중요한 섹션이 더 작아 지므로 가능한 한 많은 작업을 동시에 수행 할 수 있습니다. 아마도 더 중요한 것은 Enclosing 객체에 의해 개인적으로 제어되는 잠금 객체를 사용할 수 있습니다. 이렇게하면 교착 상태가 발생할 수 없음을 보장 할 수 있습니다. 인스턴스 자체를 잠금으로 사용하면 누구나 잘못 동기화하여 교착 상태를 유발할 수 있습니다.

  • 유형의 피연산자 short 홍보됩니다 int 모든 작업에서. 이 규칙은이 프로모션이 발생하고 있음을 알려주고 있으며 int. 그러나 사용 short 유형은 메모리를 저장할 수 있으므로 인스턴스 멤버 인 경우 해당 규칙을 무시할 수 있습니다.

다른 팁

DataFlowanomalyanalysis : 변수 '변수'(lines 'n1'-'n2')에 대한 'dd'-anomaly를 찾았습니다.

DataFlowanomalyanalysis : 변수 '변수'(lines 'n1'-'n2')에 대한 'du'-anomaly를 찾았습니다.

몰라요.

NullAssignment : NULL에 객체를 할당하는 것은 코드 냄새입니다. 리팩토링을 고려하십시오.

객체를 설정하지 않을 것입니다 null 객체가 로컬 객체 인 경우 (방법 외부에서 사용되지 않음) 쓰레기 수집을 지원합니까? 아니면 신화입니까?

로컬 방법의 객체는 메소드가 돌아 오면 수집 된 쓰레기로 표시됩니다. 널로 설정하는 것은 아무런 차이가 없습니다.

경험이 적을 수 있기 때문에 그 널 과제가 무엇인지에 대한 모든 과제는 코드 냄새로 간주 될 수 있습니다.

MethodArgumentCouldBefinal : Parameter 'Param'이 할당되지 않았으며 최종 선언 될 수 있습니다.

LocalVariableCouldBefinal : 로컬 변수 '변수'가 최종 선언 될 수 있습니다.

사용하는 장점이 있습니까? final 매개 변수와 변수?

물체의 수명주기 동안 값이 변하지 않음을 분명히합니다.

또한 우연히 누군가 값을 할당하려고하면 컴파일러가 컴파일 유형 에서이 코딩 오류를 방지합니다.

이걸 고려하세요:

 public void businessRule( SomeImportantArgument important )  {
      if( important.xyz() ){
          doXyz();
      }
      // some fuzzy logic here
      important = new NotSoImportant();
      // add for/if's/while etc 

     if( important.abc() ){ // <-- bug
         burnTheHouse();
     }
  } 

때때로 집을 태우는 신비한 버그를 해결하도록 할당되었다고 가정 해 봅시다.

당신은 사용 된 매개 변수가 무엇인지 알고 있습니다. 이해하지 못하는 것은 그만큼 burnTHeHouse 조건이 충족되지 않으면 방법이 호출됩니다 (결과에 따라)

중간에있는 어느 시점에서 그것을 찾는 데 시간이 걸립니다. 소몬 참조를 변경하고 사용 중입니다 다른 물체.

사용 final 이런 종류의 것들을 예방하는 데 도움이됩니다.

LooseCoupling : 'LinkedList'와 같은 구현 유형 사용을 피하십시오. 대신 인터페이스를 사용하십시오

내가 구체적으로 필요하다는 것을 알고 있다면 LinkedList, 왜 미래의 개발자들에게 의도를 명확하게 명확하게하기 위해 하나를 사용하지 않겠습니까? 의미가있는 수업 경로에서 가장 높은 수업을 반환하는 것이 한 가지이지만 왜 내 변수를 가장 엄격한 의미라고 선언하지 않겠습니까?

이 경우에는 차이가 없습니다. 나는 당신이 사용하지 않기 때문에 생각할 것입니다 LinkedList 특정 기능 제안은 공정합니다.

오늘날 Linkedlist는 의미가 있지만 인터페이스를 사용하면 자신 (또는 다른 사람)이 원치 않는 경우 쉽게 변경할 수 있도록 도와줍니다.

소규모 개인 프로젝트의 경우 전혀 의미가 없지만 분석기를 이미 사용하고 있기 때문에 이미 코드 품질에 관심이 있다고 생각합니다.

또한 경험이 적은 개발자가 좋은 습관을 만들도록 도와줍니다. [나는 당신이 하나라고 말하는 것이 아니지만 분석기는 당신을 모릅니다;)

회피 확인 : 메소드 레벨 동기화 대신 블록 레벨 사용

블록 레벨 동기화는 메소드 레벨 동기화와 어떤 장점이 있습니까?

동기화 섹션이 작을수록 좋습니다. 그게 다야.

또한 메소드 레벨에서 동기화하면 전체 객체를 차단합니다. 블록 레벨에서 동기화되면 어떤 상황에서 필요한 경우 특정 섹션을 동기화합니다.

피하기 hotttype : 짧은 유형을 사용하지 마십시오

내 첫 언어는 C와 C ++이지만 Java 세계에서는 왜 내 데이터를 가장 잘 설명하는 유형을 사용해서는 안됩니까?

나는 이것에 대해 들어 본 적이없고, 나는 당신과 동의합니다 :) 나는 단락을 결코 사용하지 않습니다.

내 생각에 사용하지 않으면 자신이 자신이 업그레이드하는 데 도움이된다는 것입니다. int 원활하게.

코드 냄새는 성능 최적화보다 코드 품질에 더 중점을 둡니다. 따라서 프로그램 속도를 향상시키는 것보다 숙련 된 프로그래머와 함정을 피하기 위해 조언이 제공됩니다.

이렇게하면 더 나은 디자인에 맞게 코드를 변경하려고 할 때 많은 시간과 좌절감을 절약 할 수 있습니다.

조언이 의미가 없다면, 그것들을 무시하십시오. 당신은 개발자이며, 도구는 그 도구 일뿐입니다. 뭔가 잘못되면 도구를 비난 할 수 없습니다.

그냥 메모 final 의문.

변수 결과에 "최종"을 넣을 수 있습니다. 한 번. 이것이 반드시 글을 쓰는 것이 더 쉽다는 것을 의미하지는 않지만 가장 확실히 더 쉽다는 것을 의미합니다. 읽다 미래의 관리자를 위해.

이 점을 고려하십시오 :

  • a final "시청하는 동안 값을 변경하지 않음"으로 즉시 분류 될 수 있습니다.
  • 암시 적으로 변경되지 않는 모든 변수가 최종으로 표시되면 최종적으로 표시되지 않은 변수가 실제로 변경됨을 의미합니다.

즉, 코드 중에 값을 변경할 수 있기 때문에 변수가 찾아야 할 변수를 읽을 때 이미 볼 수 있으며 관리자는 코드를 더 읽을 수 있으므로 노력을 더 잘 소비 할 수 있습니다.

객체가 로컬 객체 인 경우 (방법 외부에서 사용되지 않음) 쓰레기 수집에서 NULL Assist로 개체를 설정하지 않습니까? 아니면 신화입니까?

그것이하는 유일한 일은 메소드가 끝나기 전에 객체가 GCD가 될 수있게하는 것입니다.

최종 매개 변수와 변수를 사용하는 데있어 장점이 있습니까?

코드를 분석 할 때 값이 어디에서 변경되는지 걱정할 필요가 없기 때문에 코드가 다소 명확 해집니다. 더 자주 그러면 변수가 어쨌든 설정되면 변수의 값을 변경할 필요가 없습니다.

내가 구체적으로 링크드 목록이 필요하다는 것을 알고 있다면, 왜 미래의 개발자들에게 내 의도를 명확하게 명확하게하기 위해 하나를 사용하지 않겠습니까?

링크 사전 목록이 필요한 이유를 생각할 수 있습니까?

의미가있는 수업 경로에서 가장 높은 수업을 반환하는 것이 한 가지이지만 왜 내 변수를 가장 엄격한 의미라고 선언하지 않겠습니까?

로컬 변수 나 필드에 대해서는별로 신경 쓰지 않지만 유형의 메소드 매개 변수를 선언하면 LinkedList, 나는 당신을 사냥하고 당신을 다치게 할 것입니다. Arrays.asList() 그리고 Collections.emptyList().

블록 레벨 동기화는 메소드 레벨 동기화와 어떤 장점이 있습니까?

가장 큰 것은 전용 모니터 객체를 사용할 수 있으므로 해당 중요한 섹션 만 동일한 모니터를 사용하는 것이 아니라 상호 배타적이어야합니다.

Java 세계에서 내 데이터를 가장 잘 설명하는 유형을 사용해서는 안됩니까?

int보다 작은 유형은 모든 계산에 대해 int로 자동으로 홍보되며 그에 대한 모든 것을 할당하려면 캐스트해야합니다. 이것은 혼란스러운 코드와 많은 혼란을 초래합니다 (특히자가 옥싱이 관련 될 때).

피하기 hotttype : 짧은 유형을 사용하지 마십시오

  • 목록 항목

    짧은 것은 16 비트, Java에서 2의 칭찬

  • 다른 쇼트 외부의 정수 패밀리에있는 모든 것이있는 짧은 수학적 운영에는 더 큰 크기로의 런타임 부호 확장 변환이 필요합니다. 부동 소수점에 대해 작동하려면 부호 확장 및 IEEE-754로의 사소한 변환이 필요합니다.
  • 증거는 찾을 수 없지만 32 비트 또는 64 비트 레지스터를 사용하면 더 이상 바이트 코드 수준에서 '프로세서 명령어'를 저장하지 않습니다. 프로세서 레지스터에 관한 한 AA 세미 트레일러의 주차 장소에 소형차를 주차하고 있습니다.
  • 바이트 코드 레벨에서 프로젝트를 최적화하는 경우 와우. 그냥 와우. ;피
  • 이 PMD 경고를 무시하는 디자인 측면에 동의합니다. 객체를 '짧은'성능 변환과 비교하여 객체를 정확하게 설명합니다.
  • 제 생각에, 발생한 성능 히트는 대부분의 기계에서 미미합니다. 오류를 무시하십시오.

블록 레벨 동기화는 메소드 레벨 동기화와 어떤 장점이 있습니까? 메소드 동기화 방법은 do와 같습니다 synchronize(getClass()) 차단하고 모든 클래스를 차단합니다.

어쩌면 당신은 그것을 원하지 않을 것입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top