우리 유니 프로젝트에서 우리는 총 코드 행 수, 전체 프로젝트의 메소드 수와 같은 모든 정보를 삽입해야하는 정보 클래스를 제공해야하는 프로젝트를 빌드하라는 요청을 받았습니다. 우리는 리플렉션 & RTTI로 계산하고, 분명히 외부 라이브러리를 사용하지 않고 전체 메소드 수를 제공해야했습니다.Java | Reflection 및 RTTI로 모든 메소드를 계산하는 방법은 무엇입니까?
어떻게해야합니까? 사용 세터/게터 -
우리 유니 프로젝트에서 우리는 총 코드 행 수, 전체 프로젝트의 메소드 수와 같은 모든 정보를 삽입해야하는 정보 클래스를 제공해야하는 프로젝트를 빌드하라는 요청을 받았습니다. 우리는 리플렉션 & RTTI로 계산하고, 분명히 외부 라이브러리를 사용하지 않고 전체 메소드 수를 제공해야했습니다.Java | Reflection 및 RTTI로 모든 메소드를 계산하는 방법은 무엇입니까?
어떻게해야합니까? 사용 세터/게터 -
간단한 당신이 사용할 수있는 접근
class
만들기입니다.static block
을 사용하여 각 클래스의 메서드, 선 등을 계산하십시오. & 정보 클래스로 업데이트하십시오.info about the loaded number of methods/code
을 줄 수 있기를 바랍니다.마찬가지로 @ Jägermeister는이 프로젝트의 목적은 직접 사물을 시험하는 것입니다. 그래서 나는 약간의 통찰력을 주었다. - which you can follow & try out yourself.
결국 나는 해결책을 찾았고, 모두에게 감사했다.
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;
}
왜 소나와 같은 정적 analisys 도구를 사용하지 : 여기
코드인가? 편집 :이 숙제 싶었어. 이 코멘트는 무시해도됩니다. – pablochan글쎄, 당신은 몇 가지 코드를 작성하여 시작합니다. 대학 프로젝트에 대한 아이디어는 ... ** 당신이 배울 ** ** 그것을 ** 시도하는 방법 **에 의해 생각됩니다. 따라서, 여기에서 얻을 수있는 가장 좋은 점은 javas 파일 시스템 기능을 사용하여 디스크에서 모든 클래스 파일의 목록을 가져 오는 것과 같은 힌트입니다. 그런 다음 자바 리플렉션 메커니즘을 사용하여 필요한 통계를 수집하십시오. – GhostCat