Java中有没有办法存储对类的引用?这就是我想要做的事情:
public class Foo
{
public static void doSomething() {...}
};
SomeClass obj = Foo;
obj.doSomething();
是否有一些类“SomeClass”允许我存储对类的引用,以便稍后我可以使用该存储对象来调用原始类的静态成员?
显而易见的是Class class:
Class obj = Foo.class;
obj.someMember().doSomething();
但我还没想出哪个班级的成员可能会扮演“someMember()”......我认为他们都没有。
有人知道我在Java中尝试做什么是可能的吗?
答案 0 :(得分:5)
您可以使用类上的getMethod()方法从Class对象动态获取方法。如果方法是静态的,那么“invoke”的“object”参数将为null。
例如,上面的“obj.someMember()”就是这样的:
obj.getMethod("someMember", null).invoke(null, null);
额外的空值是因为您的方法不需要参数。如果您的方法采用参数,则需要相应地传递它们。
这将抛出各种已检查的异常,因此您也需要处理这些异常。
一旦调用了该方法,它将返回一个Object。你想把它转换成你期望的任何类型,然后你就可以直接运行“doSomething()”方法了。
这是使用一种叫做反射的技巧,如果你想更多地阅读它。 :)
答案 1 :(得分:0)
如果您使用的是jdk1.5或更高版本,当您想要获取Class的元数据时,注释将是一个选择。