Программа для нахождения количества методов в программе Java

#java

#java

Вопрос:

Я использовал следующий код для определения количества функций в классе. Любой другой аналогичный способ может помочь мне определить количество функций в программе Java. В моей программе я предоставил входной файл в виде класса. Подскажите мне код для ввода данных в виде java-программы и определения количества объявленных в ней функций.

 import java.lang.reflect.*;
import java.io.*;
import java.lang.String.*;
   public class Method1 {
      private int f1(
       Object p, int x) throws NullPointerException
      {
         if (p == null)
            throw new NullPointerException();
         return x;
      }

      public static void main(String args[])throws Exception
      {
         int Mcount=0,MthdLen=0;
         try {
           Class cls = Class.forName("Madhu");
        int a;
            Method methlist[]= cls.getDeclaredMethods();
            for (int i = 0; i < methlist.length;i  )
            {  
               Method m = methlist[i];
               Mcount = Mcount   1;
               MthdLen=MthdLen (m.getName().length());
            }
         }
         catch (Throwable e) {
            System.err.println(e);
         }
        System.out.println("Length = "   MthdLen);
        System.out.println("Mcount = "   Mcount);
      }
   }
  

Комментарии:

1. Может ли это быть домашним заданием?

2. Что означает «предоставление входных данных в виде программы Java»? Что вы пытаетесь посчитать?

Ответ №1:

Прежде всего,

  Class cls = Class.forName("Madhu");
  

Требуется полное имя требуемого класса. например Class.forName("java.lang.Thread")' .

Во-вторых,

  Method methlist[]= cls.getDeclaredMethods();
  

возвращает public , protected private и метод по умолчанию только для этого конкретного класса (это исключает унаследованные методы).

В-третьих,

 MthdLen=MthdLen (m.getName().length());
  

Суммирует длину строки имени метода. Для чего вам это нужно? Вы могли бы просто выполнить подсчет следующим образом:

 int MCount = cls.getDeclaredMethods().length; //If the "getDeclaredMethods()` doesn't return a null.
  

Наконец, если вам нужно получить все унаследованные общедоступные и защищенные методы этого класса, вы должны сделать

 Class<?> class2 = cls.getSuperClass();

//Get all methods using
Method[] methods2 = class2.getDeclaredMethods();

//Iterate through methods2 and retrieve all public, protected methods and add it to MCount.
  

Надеюсь, это поможет.

Ответ №2:

В Java нет никаких функций, поэтому ответ равен 0. 😉

Если вы ищете количество методов, вы должны спросить себя, хотите ли вы

  • включить унаследованные методы.
  • подсчитайте переопределенные методы один или несколько раз.
  • включать все методы в Object или нет.

например

 public class Main {
    static class A {
        public String toString() {
            return super.toString();
        }
    }
    static class B extends A {
        public String toString() {
            return super.toString();
        }
    }

    public static void main(String args[]) {
        for(Class clazz = B.class;clazz != null;clazz = clazz.getSuperclass()) {
            for(Method m: clazz.getDeclaredMethods())
                System.out.println(m);
        }
    }
}
  

С принтами

 public java.lang.String Main$B.toString()
public java.lang.String Main$A.toString()
protected void java.lang.Object.finalize() throws java.lang.Throwable
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
private static native void java.lang.Object.registerNatives()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
  

Ответ №3:

В JDK6 вы могли бы скомпилировать файл во время выполнения с помощью JavaCompiler и использовать свой старый код для определения количества методов.

Редактировать:
Бонус: замените свой код на

 System.out.println("Total number of methods: "    
              java.beans.Introspector.getBeanInfo( //your class name here
                                              ).getMethodDescriptors().length);
  

Ответ №4:

я использую этот код, чтобы узнать количество методов в классе внутри другого класса.

 public class test1 {
    public static void main(String[] args)
//if use in class 
//Method[] s = getClass.getDeclaredMethods();
        Method[] s = SmokeTestTests.class.getDeclaredMethods();
        int methodCounter = 0;
        for (Method method :
                s) {
              methodCounter;
        }
        System.out.println(methodCounter);
    }