2016-06-06 20 views
0

In unserem uni-Projekt wurden wir gebeten, ein Projekt zu erstellen, in dem wir auch eine Info-Klasse bereitstellen sollten, in die wir alle Informationen wie Gesamtanzahl der Codezeilen, Anzahl der Methoden (im gesamten Projekt) einfügen sollten. Wir wurden gebeten, die vollständige Anzahl von Methoden zur Verfügung zu stellen, um mit Reflection & RTTI zu berechnen, und natürlich ohne Verwendung von externen Bibliotheken.Java | Wie zählen Sie alle Methoden mit Reflection & RTTI?

Wie soll ich tun?

+0

Warum nicht ein statisches analisys Tool wie Sonar benutzen? EDIT: Ich habe verpasst, dass das Hausaufgaben waren. Sie können diesen Kommentar ignorieren. – pablochan

+0

Nun, Sie beginnen mit dem Schreiben von Code. Ich denke, die Idee eines Universitätsprojekts ist ..., dass Sie ** lernen **, wie Sie das tun, indem Sie es selbst ausprobieren. Also, das Beste, was Sie hier bekommen können, ist ein Tipp wie: Verwenden Sie Javas Dateisystemfunktionen, um eine Liste aller Klassendateien von der Festplatte zu holen. Dann verwenden Sie Java-Reflektionsmechanismen, um die benötigten Statistiken zu sammeln. – GhostCat

Antwort

0

einfachste Ansatz können Sie verwenden, ist,

  1. ein class Erstellen Sie die Informationen, die Sie benötigen (Anzahl der Methoden, Linien oder was auch immer) zu speichern - Verwendung Setter/Getter.
  2. Verwenden Sie eine static block in allen Ihren Anwendungsklassen, um die Methoden, Linien usw. für jede Klasse zu berechnen & aktualisieren Sie es auf Info-Klasse.
  3. Ich hoffe zu einem bestimmten Zeitpunkt kann es Ihnen die info about the loaded number of methods/code geben.

Wie @ Jägermeister zu Recht gesagt hat, ist das Ziel dieses Projekts, Dinge selbst auszuprobieren. Also gab ich einige Einblicke - which you can follow & try out yourself.

0

Schließlich kam ich zu einer Lösung, danke euch allen.

Hier ist der Code:

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; 

}