gpt4 book ai didi

java - getClass() 和静态方法 : What is the best practice?

转载 作者:行者123 更新时间:2023-11-29 04:04:48 24 4
gpt4 key购买 nike

我希望通过反射为将要使用我的代码的程序员提供一些便利。为了达到我想要的结果,我想为扩展我的代码的类获取类对象。尽管他们无法覆盖我希望从中访问信息的静态方法,但它目前很有用。我可能最终会简单地重构一下设计以避免这种情况,但我想把这个问题抛给社区。

据我所知,实现此目的的唯一方法是获取当前线程、导航堆栈跟踪并提取类名,然后将其转换为该类的实际实例。

还有什么建议吗?

旁注:上述方法也是我知道获取调用方法的唯一方法。

最佳答案

不幸的是,遍历堆栈并不一定安全:

来自 getStackTrace 的 JDK 6 Javadoc:

Some virtual machines may, under some circumstances, omit one or more stack frames from the stack trace. In the extreme case, a virtual machine that has no stack trace information concerning this throwable is permitted to return a zero-length array from this method. Generally speaking, the array returned by this method will contain one element for every frame that would be printed by printStackTrace.

也许您可以使用调试器 api 来完成它。我相信调试的东西能够全速使用 HotSpot(我可能是错的)所以你不会看到这样做的巨大速度损失。您可以先查看:http://java.sun.com/javase/6/docs/technotes/guides/jpda/trace.html

此外,基于未回答的答案...

class Base
{
// instance method helper
public final int foo()
{
return (foo(this.getClass()));
}

// the real helper, with access to the class
private static int foo(final Class clazz)
{
return (0);
}
}

class Child
extends Base
{
public void bar()
{
final int x;

x = foo();
}
}

关于java - getClass() 和静态方法 : What is the best practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/601395/

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