0
点赞
收藏
分享

微信扫一扫

java中invoke第一个参数为空/类对象,而不是类实例

耶也夜 2022-01-20 阅读 41
java

使用invoke时,有时其第一个参数为空。查了一下大部分答案都说如果反射的方法是static时,可以为空。其他情况下,参数需为类对象的实例,但测试发现参数是类对象,而不是类实例。

Method forName = Class.class.getDeclaredMethod("forName", String.class);
Class<?> vmRuntimeClass = (Class<?>) forName.invoke(null, "dalvik.system.VMRuntime");

看定义可以知道forName是static的方法,所以第一个参数可以为空

static fun forName(
    name: String, 
    initialize: Boolean, 
    loader: ClassLoader?
): Class<*>

其他情况使用时,发现传入的其实是类对象,而不是类对象实例,例子如下

Method forName = Class.class.getDeclaredMethod("forName", String.class);
Class<?> vmRuntimeClass = (Class<?>) forName.invoke(null, "dalvik.system.VMRuntime");
Method getRuntime = (Method) getDeclaredMethod.invoke(vmRuntimeClass, "getRuntime", null);

getDeclaredMethod方法invoke时返回的传入的是vmRuntimeClass是类对象,而不是类实例。

(Class.forName返回的是类对象,而不是类对象实例)。

举报

相关推荐

0 条评论