é possível armazenar o nome do método em uma matriz, e contar quantas vezes ele foi chamado?

James Wong:

Eu preciso para simular uma pilha de chamadas. Agora eu já implementou a minha stack, agora eu estou querendo saber se há uma maneira de armazenar o nome do método na matriz.

Por exemplo, eu tenho uma função de recursão que loops de 5 vezes, então a pilha será:

recur() //fifth 
recur() //fourth
recur() //third
recur() //second
recur() //first

mas há de qualquer maneira para armazená-los em uma matriz e exibi-lo fora? Eu não precisa se preocupar com o que ele faz dentro da função recursão, eu só quero mostrar o nome da pilha e a sequência e como ele funciona.

Ezequiel:

Você poderia contar o número de invocações sem passar qualquer novo parâmetro para o recurmétodo.

recursiveMethodCount filtra o rastreamento de pilha atual e conta as ocorrências.

import java.util.Arrays;

public class StackTrace {

    public static void main(String[] args) {
        recur();
    }

    public static void recur() {
        long recursionLevel = recursiveMethodCount("StackTrace", "recur");
        if (recursionLevel < 10) {
            System.out.println(String.format("Recursion level is %d, invoking recur() again.", recursionLevel));
            recur();
        } else {
            System.out.println(String.format("Recursion level is %d, no more invocations.", recursionLevel));
        }
        System.out.println(String.format("Recursion level is %d, returning.", recursionLevel));
    }

    public static long recursiveMethodCount(String declaringClass, String methodName) {
        return Arrays.stream(Thread.currentThread().getStackTrace())
                .filter(stackTraceElement -> stackTraceElement.getClassName().equals(declaringClass))
                .filter(stackTraceElement -> stackTraceElement.getMethodName().equals(methodName))
                .count();

    }
}

A saída desse código é

Recursion level is 1, invoking recur() again.
Recursion level is 2, invoking recur() again.
Recursion level is 3, invoking recur() again.
Recursion level is 4, invoking recur() again.
Recursion level is 5, invoking recur() again.
Recursion level is 6, invoking recur() again.
Recursion level is 7, invoking recur() again.
Recursion level is 8, invoking recur() again.
Recursion level is 9, invoking recur() again.
Recursion level is 10, no more invocations.
Recursion level is 10, returning.
Recursion level is 9, returning.
Recursion level is 8, returning.
Recursion level is 7, returning.
Recursion level is 6, returning.
Recursion level is 5, returning.
Recursion level is 4, returning.
Recursion level is 3, returning.
Recursion level is 2, returning.
Recursion level is 1, returning.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=338740&siteId=1
Recomendado
Clasificación