2017-03-09 22 views
1

这是我的情况:我怎样才能得到一个类的名称,用静态方法(不带除外)

我必须写一个方法至极可以在任何类地叫了名字了类正在调用该方法。返回类型应该是Class,所以我可以将其用于其他方法。这就是我现在所拥有的,但我认为它不是一个干净的代码。也许有办法使用

public class Vlogger{ 
    public static Class getInstance() throws ClassNotFoundException { 
     String className =new Exception().getStackTrace()[1].getClassName(); 
     return Class.forName(className); 
    } 
} 
+2

的[获取当前栈跟踪Java中]可能的复制(http://stackoverflow.com/questions/1069066/get-current- stack-trace-in-java) – Fildor

+1

[我要引用接受的答案:](http://stackoverflow.com/questions/1696551/how-to-get-the-name-of-the-calling-class -in-java)“但实际上应该没有必要这样做,除非出于某种日志记录的目的,因为这是一项相当昂贵的任务。这是什么问题,您认为这是解决方案?我们可能会来提出更多更好的建议。“ – SomeJavaGuy

+0

是的你是对的我需要编写一个日志记录类,使用一个日志类和一个类为sysout建立日志 – TheLegend31

回答

1

不幸的是,这个任务还没有干净的代码。

准备来取代它,当Java 9已发布:

public class Vlogger{ 
    public static Class getInstance() { 
     return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) 
         .getCallerClass(); 
    } 
} 
+0

Java 9中似乎有一些关于它的内容:http://openjdk.java.net/jeps/259 – kaqqao

相关问题