Java 方法.getClass().newInstance()和SomeClass.class.newInstance()之间的差异?
最近我开始有点胡思乱想。我遇到了一个我找不到任何答案的问题。我会尽力解释问题所在 首先,我有一个从反射中得到的方法,它有一个注释。当我试图调用这个方法时,我当然需要它所在的类的一个实例。这是我所做的,因为在我的项目中,这是最容易做到的:Java 方法.getClass().newInstance()和SomeClass.class.newInstance()之间的差异?,java,reflection,Java,Reflection,最近我开始有点胡思乱想。我遇到了一个我找不到任何答案的问题。我会尽力解释问题所在 首先,我有一个从反射中得到的方法,它有一个注释。当我试图调用这个方法时,我当然需要它所在的类的一个实例。这是我所做的,因为在我的项目中,这是最容易做到的: method.invoke(method.getClass().newInstance(), context); 然而,这并没有起作用。使用此方法引发的异常是NoSuchMethodException。 但是,当我尝试直接获取包含该方法的名为someClass
method.invoke(method.getClass().newInstance(), context);
然而,这并没有起作用。使用此方法引发的异常是NoSuchMethodException。
但是,当我尝试直接获取包含该方法的名为someClass的类时,它没有引发异常并成功返回该方法:
method.invoke(someClass.class.newInstance(), context);
我希望有更有经验的人可以澄清这一点,这样我就可以从中学习,并希望在将来更轻松地使用反射
提前谢谢
-DutchJellymethod.getClass()
返回method.class
,即method
的类对象。这与例如“ABC.getClass()
返回String.class
的方式类似
您可能正在查找的是。
method.getClass()
获取的是method.class
,而不是该方法所属的类。它在反射类上进行反射。一个方法有一个类吗?我以为它只属于一个类。方法
是方法
类的一个实例。反射使您将方法视为对象。当您调用method.getClass()方法时,它是java.lang.reflect.method
类的对象,因此您将得到它。不如试着测试一下你的方法.getClass()返回了什么?啊,谢谢。这帮助我理解了更多的思考。也许你也可以正式回复帖子,这样其他人就可以更容易地看到这一点。很抱歉,这个问题看起来很愚蠢。