Java 类如何访问自己的类名?
我使用一个动态生成类的java应用程序。通过ant脚本,将为给定的类名和类模板生成源代码 在类的模板中,我甚至需要知道这个类的名称,以便调用该类的静态方法 例如。该类将命名为“VersionInfo”。然后在它的static main()中,我想调用静态方法:VersionInfo.getId()。 但是我不知道班名 对于静态上下文,是否有与“this”等价的类或用于此目的的某个实用程序类?在静态上下文中不能使用键“this” 相反,如果要动态调用静态函数,可以使用Java 类如何访问自己的类名?,java,Java,我使用一个动态生成类的java应用程序。通过ant脚本,将为给定的类名和类模板生成源代码 在类的模板中,我甚至需要知道这个类的名称,以便调用该类的静态方法 例如。该类将命名为“VersionInfo”。然后在它的static main()中,我想调用静态方法:VersionInfo.getId()。 但是我不知道班名 对于静态上下文,是否有与“this”等价的类或用于此目的的某个实用程序类?在静态上下文中不能使用键“this” 相反,如果要动态调用静态函数,可以使用 我无法进一步帮助您了解jav
我无法进一步帮助您了解java反射,因为我从未使用过它,但我已经在.Net中使用过它,而且它是一个强大的工具。如果您是通过Ant创建类,那么为什么不生成一个返回类名称的静态方法getClassName?有一个棘手的解决方法:
public static final Class THIS_CLASS = new Object() {
public Class getParentClass() {
return getClass().getEnclosingClass();
}
}.getParentClass();
我不太明白。如果您自己生成类
VersionInfo
,为什么不能从生成类的代码中获取类名?如果您的主方法位于同一个类中,您只需在主方法中调用getId()
。这个问题最清晰的答案可能是使用静态的已知,由引用动态类名的ANT脚本生成的名称,然后让主方法引用该已知类
如果出于某种原因这还不够,那么结合Joachim Sauer和Melursus answer,并获得类名,然后通过反射获得方法:
Method m = THIS_CLASS.getDeclaredMethod("getId", null);
Object result = m.invoke(null, null);
你是说它应该产生这个
public class VersionInfo{ // VersionInfo class name changes, per problem description
public static void main(){
System.out.println(getId());
// but in the main within the class,we don't need the classname to call a static method
}
public static string getId(){
return "what's the problem?";
}
}
描述中是否缺少某些内容,即您正在通过模板名称未知的方式调用其他类的静态方法?尝试以下操作:
package uk.co.farwell.stack_overflow;
public class Test_847708 {
private final static String getId() {
return "string";
}
public static void main(String args[]) {
System.out.println("getId=" + getId());
}
}
这肯定是一个令人讨厌的解决办法,但并不能完全解决他的问题。如果他需要引用ClassName.method(),拥有Class对象没有任何帮助,除非作为reflection.sry的启动程序,用于不准确的描述。试图使示例简单,但实际上这是误导。当然,主要的方法是在另一个类别中,我想知道更多关于需求的信息。如下文所述,如果方法是静态的,您可以直接引用该方法的名称:getId()。你不需要使用反射。请看下面我的答案,如果我是对的,请投鲁道夫森一票,因为他比我先得到了答案。我按照提议解决了它。(对“为什么”的回答是:我希望有一些方便的java方法——因为现在我必须深入研究生成源代码的应用程序……)