LINUX.ORG.RU

ПриветМир на jave

 


0

1
  1 import java.lang.reflect.*;
  2 class ПриветМир{
  3         public static void main(String[] main){
  4                 System.out.println(??);
  5         }
  6 
  7 }
     

как узнать имя текущего исполняемого метода? ( а точнее класса метода вне зависимости статический или обычный метод?)

★★☆

Если динамически, то

new Throwable().getStackTrace() - выдаст тебе текущий стектрейс, там уже разберёшься.

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

Если статически, то ПриветМир.class

Не совсем понятно, что именно ты хочешь сделать.

Legioner ★★★★★
()
public String getCurrentMethod(){
    try {
        throw new Exception("");
    } catch (Exception e) {
        return e.getStackTrace()[0].toString();
    }
    return ""; // This never happens
}
kovrik ★★★★★
()
Ответ на: комментарий от Legioner

первое и если возможно по проще- т.е копипастируемое крокодилеще

второе не подходит так как знает имя класа на прямую

т.е в коде ПриветМир только в одном месте - в обьявлении имени самого класса

qulinxao ★★☆
() автор топика
Ответ на: комментарий от kovrik

индекс 1? мыже это вызываем чтобы узнать кто вызвал - а иначе всегда getCurrentMethod -

и кстати автоинлайнинг не спутает ли карты?

qulinxao ★★☆
() автор топика
Ответ на: комментарий от qulinxao

и кстати автоинлайнинг не спутает ли карты?

с чего это?

kovrik ★★★★★
()
Ответ на: комментарий от kovrik

благодарю

class ПриветЛор{
static public String getCurrentMethod(){
	    try {
		            throw new Exception("");
			        } catch (Exception e) {
					        
String s=e.getStackTrace()[1].toString();
return s.substring(0,s.indexOf('.'));
						    }
	        //return ""; // This never happens
}

public  static void main(String[] A){
	System.out.println(getCurrentMethod());
}
}
qulinxao ★★☆
() автор топика
Ответ на: комментарий от Legioner
class благодарюLegioner{
	public static void main(String[] main){
		String a=new Throwable().getStackTrace()[0].toString();
		System.out.print(a.substring(0,a.indexOf('.')));
	}
}[/java]
qulinxao ★★☆
() автор топика
Последнее исправление: qulinxao (всего исправлений: 1)
Ответ на: комментарий от Legioner
class благодарюЗнаниеБиблиотекиЛучшеНаличияИнтелиСенс{
	public static void main(String[] main){
		System.out.println(new Throwable().getStackTrace()[0].getClassName());
				}
}
qulinxao ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.