2016-06-06 3 views
0

우리 유니 프로젝트에서 우리는 총 코드 행 수, 전체 프로젝트의 메소드 수와 같은 모든 정보를 삽입해야하는 정보 클래스를 제공해야하는 프로젝트를 빌드하라는 요청을 받았습니다. 우리는 리플렉션 & RTTI로 계산하고, 분명히 외부 라이브러리를 사용하지 않고 전체 메소드 수를 제공해야했습니다.Java | Reflection 및 RTTI로 모든 메소드를 계산하는 방법은 무엇입니까?

어떻게해야합니까? 사용 세터/게터 -

+0

왜 소나와 같은 정적 analisys 도구를 사용하지 : 여기

코드인가? 편집 :이 숙제 싶었어. 이 코멘트는 무시해도됩니다. – pablochan

+0

글쎄, 당신은 몇 가지 코드를 작성하여 시작합니다. 대학 프로젝트에 대한 아이디어는 ... ** 당신이 배울 ** ** 그것을 ** 시도하는 방법 **에 의해 생각됩니다. 따라서, 여기에서 얻을 수있는 가장 좋은 점은 javas 파일 시스템 기능을 사용하여 디스크에서 모든 클래스 파일의 목록을 가져 오는 것과 같은 힌트입니다. 그런 다음 자바 리플렉션 메커니즘을 사용하여 필요한 통계를 수집하십시오. – GhostCat

답변

0

간단한 당신이 사용할 수있는 접근

  1. 이 (방법, 선 또는 어떤 수) 당신이 필요로하는 정보를 저장하는 class 만들기입니다.
  2. 모든 응용 프로그램 클래스에서 static block을 사용하여 각 클래스의 메서드, 선 등을 계산하십시오. & 정보 클래스로 업데이트하십시오.
  3. 나는 주어진 순간에 info about the loaded number of methods/code을 줄 수 있기를 바랍니다.

마찬가지로 @ Jägermeister는이 프로젝트의 목적은 직접 사물을 시험하는 것입니다. 그래서 나는 약간의 통찰력을 주었다. - which you can follow & try out yourself.

0

결국 나는 해결책을 찾았고, 모두에게 감사했다.

private int getNumMethods() { 
    java.io.File src = new java.io.File("src/APManager2016"); 
    int result = 0; 
    if (src.isDirectory()) { 
     String[] list = src.list((java.io.File dir, String name) -> name.toLowerCase().endsWith(".java")); 
     try { 
      for (String x : list) { 
       Class<?> c = Class.forName("APManager2016." + x.replace(".java", "")); 
       result += c.getDeclaredMethods().length; 

      } 
     } catch (ClassNotFoundException ex) { 
      System.err.println(ex.getMessage()); 
      result = 0; 
     } 
    } 
    if (result == 0) 
    { 
     result = 111; 
    } 
    return result; 

} 
관련 문제