gpt4 book ai didi

java - Java 中有没有一种方法可以确定一个方法是否在静态初始值设定项中被调用(或不被调用)?

转载 作者:行者123 更新时间:2023-11-30 07:27:02 25 4
gpt4 key购买 nike

作为检查是否正确使用静态注册表的一种方式:

class AClass {
static final IDType = IDregistry.registerId(...);
}

class IDRegistry {
public static registerId(...)
{
if(isCalledInStaticInitializer()) {
return(new IDType(...));
}
assert false : "NO NO - can't do this !!!";
}
}

最佳答案

我认为你不应该这样做。但如果你坚持,这会让你开始:

public static boolean isCalledInStaticInitializer()
{
for (StackTraceElement ste : Thread.currentThread().getStackTrace())
{
if("<clinit>".equals(ste.getMethodName()))
{
return true;
}
}
return false;
}

资料来源:JVM Specification 的第 2.9 节(“特殊方法”):

“一个类或接口(interface)最多有一个类或接口(interface)初始化方法,并通过调用该方法进行初始化(§5.5)。类或接口(interface)的初始化方法具有特殊名称 <clinit>

关于java - Java 中有没有一种方法可以确定一个方法是否在静态初始值设定项中被调用(或不被调用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com