Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态构造期间获取类的名称_Java_Static - Fatal编程技术网

Java 在静态构造期间获取类的名称

Java 在静态构造期间获取类的名称,java,static,Java,Static,在C中,我可以像这样将类的名称分配给局部静态变量 public class MyClass { private static string TAG = typeof(MyClass).Name; } 我发现这非常有用,因为如果类被重构为另一个名称,字符串的值会自动更新。便于标记调试消息等 在Java中这样做可能吗 我知道我可以使用getClass.getName,但这需要对对象的引用。有没有一种方法可以对静态变量执行此操作?您不需要将类的名称指定给字段,而需要编写 MyCla

在C中,我可以像这样将类的名称分配给局部静态变量

 public class MyClass
 {
      private static string TAG = typeof(MyClass).Name;
 }
我发现这非常有用,因为如果类被重构为另一个名称,字符串的值会自动更新。便于标记调试消息等

在Java中这样做可能吗


我知道我可以使用getClass.getName,但这需要对对象的引用。有没有一种方法可以对静态变量执行此操作?

您不需要将类的名称指定给字段,而需要编写

MyClass.TAG
你可以写

MyClass.class.getName();

如果您真的需要,您可以将其分配给标记,但我看不出重点。

您不需要将类的名称分配给字段,而需要编写

MyClass.TAG
你可以写

MyClass.class.getName();

如果您真的需要,您可以将其分配给标记,但我看不出有什么意义。

还有一个技巧,它不需要程序员事先知道类名:

public class MyClass
  {
    private static String TAG =
        new Object() { }.getClass().getEnclosingClass().getName();
  }

这个技巧使用嵌套的匿名对象子类来获取执行上下文。在跨不同类克隆代码时,它具有复制/粘贴安全的优点…

还提供了一种不需要程序员事先知道类名的技巧:

public class MyClass
  {
    private static String TAG =
        new Object() { }.getClass().getEnclosingClass().getName();
  }

这个技巧使用嵌套的匿名对象子类来获取执行上下文。在跨不同类克隆代码时,它具有复制/粘贴安全的优点…

删除[c],因为答案与此无关C@PeterLawrey答案不会,问题与此有关。@newstackexchange我想当你搜索c时,你会更喜欢关于c的答案,而不是直接提到c的问题,而不是答案。@PeterLawrey你说得有道理。把[c]作为答案去掉与问题无关C@PeterLawrey答案不会,问题与此有关。@newstackexchange我想当你搜索c时,你会更喜欢关于c的答案,而不是只提到c的问题,而不是答案。@PeterLawrey你说得有道理。这很聪明。如果MyClass是抽象的,这会允许标记保留派生类的名称吗?不幸的是,不会。人们必须在每个可能需要的派生类中复制这段代码…这非常聪明。如果MyClass是抽象的,这会允许标记保留派生类的名称吗?不幸的是,不会。在可能需要的每个派生类中,都必须复制这段代码。。。