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