-
Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?5
Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?而要invoke来调用对象的方法?2014年12月20日 23:27
6个答案 按时间排序 按投票排序
-
你要是事先已经知道是什么类,当然可以将Class构造一个实例,造型成你的类对象直接调用了。
示意代码例如:
Class c = .... Object o = c.callConstruct( args );//调用构造方法 MyClass mo = (MyClass)o; mo.myMethod(...);
2014年12月26日 09:16
-
try {
//传入的类名和方法名
String className="demo.Test";
String methodName="saveData";
Class c = Class.forName("");
Method ms[] = c.getDeclaredMethods();
for(Method m:ms){
//遍历找到所需要的方法
if(m.getName().equals(methodName)){
//传入参数,执行方法(参数我就不写了)
m.invoke(obj, args);
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
你还是没有理解啊,自己把代码敲一遍就知道了。
既然用到了反射,那就说明这是通用模版,所需要的类,方法名,参数都是未知的,需要传过来的。
你Class a=Class.forName("demo.Test"),就算c.newInstance(),
c也还是Class类,没有变成Test类,所以没法通过c来直接引用Test的方法。
只能根据方法名去获取方法
2014年12月22日 09:37
-
举个简单例子,你肯定是用过spring的注入方式吧
比如你想要在PersonService类中注入PersonDao,那么如果按照new的方式,那就是Person.setPersonDao(dao),那么如果多个Servcie的话,是不是意味着你要写一大堆的new方式,那么BeanFacory怎么使用的呢?for (Method method : methods) { String name = method.getName(); if (name.length() > 3 && name.startsWith(SET_METHOD) && Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers()) && method.getParameterTypes().length == 1) { Class<?> parameterType = method.getParameterTypes()[0]; if (Map.class.equals(parameterType) && SET_PROPERTIES_METHOD.equals(name)) { method.invoke(object, new Object[] { instances }); } }
这里只是一小段代码,实际上做到了通用,这样不管多少个Servcie只要你前提是set方式,我就帮你织入注入类,当然这里我未描写proxy,加上动态代理,可能说的更为透彻2014年12月21日 21:19
-
Class是对类的抽象(每个类对应一份字节码)。一般情况下,比如A a = new A();直接通过a对象调用方法即可。但是在有些场景下,这样是做不到的,比如类名A是通过参数传递过来的,这时候你就无法通过new的方法创建对象,需要先加载这个类,获取Method对象,然后用Method已反射的形式调用相应的方法。
2014年12月21日 13:27
相关推荐
Java 通过反射创建对象并调用方法 Java 通过反射创建对象并调用方法是 Java programming 语言中的一种高级技术,允许开发者在运行时动态地创建对象和调用方法。这种技术广泛应用于 Java 框架和库的开发中,例如 ...
Java 反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法。反射机制能够做很多事情,例如: * 判断运行对象的所属类 * 构造任意一个类的对象 * 获取任意一个类的属性和方法 * 调用...
反射是Java提供的一种强大的机制,允许程序在运行时检查类、接口、字段和方法的信息,并能动态调用对象的方法或访问其属性。在Android中,我们可以利用反射来获取并操作类的私有成员,包括私有的Context实例。 以下...
它首先获取对象`obj`的类,然后调用`getPropertyDescriptor()`获取对应的`PropertyDescriptor`,接着从`PropertyDescriptor`中获取`set`方法,最后使用`invoke()`方法调用`set`方法,将`value`值设置到对象的属性上...
3. 一旦你得到了注解对象,就可以调用它的方法来获取注解的属性值。例如,`tableAnnotation.name()`将返回表的名称。 接下来,我们将讨论如何在Spring框架中遍历指定包下的所有类文件。Spring提供了`...
然后,我们可以使用反射来调用`getApplicationContext()`方法,如果对象不直接公开这个方法: ```java try { Class<?> clazz = Class.forName("com.example.MainActivity"); Object instance = clazz.newInstance...
Java 8作为重要的版本更新之一,新增了许多特性,其中就包括了对方法参数反射的增强。本篇将从Java 8引入的新特性出发,详细阐述Java 8中新增的方法参数反射功能,并通过实例展示其应用。 首先,我们来看看Java 8...
总结来说,Java的反射机制为我们提供了一种灵活的方式来操作对象,包括从`List`中取出对象并获取其属性值。这种方法使得代码更具通用性和可复用性,特别适合处理各种类型的数据集合。在实际应用中,一定要注意处理...
外部想要调用这些对象,那么就使用Map的键,来拿到这个集合中对应的值(对象)。 在IOC容器类中,我们首先需要加载XML文件,然后扫描配置的对象信息。我们可以使用Java的DOM解析XML文件,获取每个对象的信息。然后...
线程池是一种将多个线程对象放到一个容器中的技术,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高了代码执行效率。Java 中的线程池可以使用 java.util.concurrent 包中的 ...
7. **反射机制**:Class类的使用,动态加载类,创建对象,调用方法,访问字段等。 8. **JVM**:Java虚拟机的工作原理,内存模型(堆、栈、方法区),垃圾回收机制等。 9. **设计模式**:常见的设计模式如单例模式...
在`main`方法中,我们可以通过直接访问和调用方法来获取子类的属性。 **标签:“源码”与“工具”:** 在实际开发中,理解源码可以帮助我们更好地掌握类库的工作原理,从而优化代码和解决问题。对于“工具”,可能...
180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了在Java面试中脱颖而出,了解并掌握核心的Java知识点至关重要。这份“Java面试题”...祝你在面试中取得好成绩,顺利拿到理想的offer!
当应用程序需要某个bean时,只需通过bean ID就可以从Map中获取,这就是描述中提到的“从map中拿到的对象”。 接下来,我们查看源码中关于Bean Factory的实现。Spring的核心实现是`DefaultListableBeanFactory`,它...
- 反射:通过 `Class` 类获取运行时类信息,创建对象,调用方法等。 - 泛型:限制参数类型,增强类型安全,`extends` 表示上限边界,`super` 表示下限边界。 - 多态:同一方法根据对象的实际类型表现出不同行为,...
对于Android 6.0以下的版本(API级别22及更低),我们可以直接使用Google提供的公共方法来获取Mac地址,即通过`WifiManager`的`getConnectionInfo()`方法获取`WifiInfo`对象,然后调用`getMacAddress()`获取Mac地址...