gpt4 book ai didi

java - 在不加载类的情况下近似 class.getSimpleName() 的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:11 25 4
gpt4 key购买 nike

给定一个完全限定的类名,可以用 Class.forName() 加载,有没有办法将名称转换为加载类和调用 getSimpleName() 的结果没有实际尝试加载类?我需要这种能力来进行反射(reflection)。

最佳答案

我要说的是,您不能仅根据名称来做到这一点。

您可以尝试在 .$ 上拆分,但此示例代码表明简单名称的开始位置并不总是很明显:

class Ideone
{
private static class Bar {};

public static void main (String[] args) throws java.lang.Exception
{
class Foo$o {
class Bar$bar {}
};
class Foo$o$Bar {
class Bar$bar {}
};
class Foo$o$Bar$Bar$bar {}
print(Ideone.class);
print(Bar.class);
print(Foo$o.class);
print(Foo$o.Bar$bar.class);
print(Foo$o$Bar.Bar$bar.class);
print(Foo$o$Bar$Bar$bar.class);
}

private static void print(Class<?> clazz) {
System.out.printf("fqn=%s, sn=%s%n", clazz.getName(), clazz.getSimpleName());
}
}

输出:

fqn=Ideone, sn=Ideone
fqn=Ideone$Bar, sn=Bar
fqn=Ideone$1Foo$o, sn=Foo$o
fqn=Ideone$1Foo$o$Bar$bar, sn=Bar$bar
fqn=Ideone$1Foo$o$Bar$Bar$bar, sn=Bar$bar
fqn=Ideone$2Foo$o$Bar$Bar$bar, sn=Foo$o$Bar$Bar$bar

Ideone demo

即如果您要说“最后的 $. 之后的名称部分”,那您就错了。

唯一决定性的方法是加载类,可能不初始化它:

Class<?> clazz = Class.forName(className, false, someClassLoadeR);

关于java - 在不加载类的情况下近似 class.getSimpleName() 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755410/

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