是否可以更改MyClass.class.getName()
的输出?例如:
public class MyClass {
}
public static main(String args[]) {
System.out.println(MyClass.class.getName());
}
为什么我要问:我有一个程序(我无法控制)动态加载MyClass(MyClassLoader.loadClass('MyClass')
)并调用MyClass.class.getName()
。
编辑: 我最好重申一些事实清楚:
-MyClass由具有Class new_class = loadClass('MyClass')
的类加载器动态加载。我无法更改此代码,这不是问题的一部分。
- 接下来发生的事情:System.out.println(new_class.class.getName())
---&GT;问题:此调用转到java.lang.Class<T>.getName()
,当然会返回'MyClass'。有没有办法改变输出?
答案 0 :(得分:1)
输出不应该是&#39; MyClass&#39;而不是&#39;无论如何&#39;。这可能吗?
不。
当然不是纯Java。
我正在努力想出一种使用字节码工程或类加载器hackery在理论上可能的方法。 (在加载之前,您可能会使用字节码工程将类名更改为something
,但它不会使用旧名称MyClass
加载。)
这扇门被关上的原因之一是#34;是类名与它们的身份密切相关......这与Java运行时类型的安全性和安全性密切相关。如果你能&#34; hack&#34;这样,就有可能导致安全漏洞。
建议:考虑另一种方法,这样你就不会有这个要求。