反射机制5(反射调用普通方法)

类中的普通方法只有在一个类产生实例化对象之后才可以调用。并且实例化对象的方式有三种。(new 克隆 反射)

范例:定义一个类。


class Book{
    private String title;

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }
    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }
}

这个类有无参构造方法,所以实例化对象的时候可以直接利用Class类中的newInstance方法获取实例化对象,然后我们需要获取普通方法时,调用Class类里的:
public Method[] getMethods():取得一个类中的全部方法
public Method getMethod(String name,Class<?>...parameterType):取得指定方法

后面是跟的方法的参数类型,因为JVM是根据参数类型和个数来确定方法签名,区分不同方法的。

以上两个操作返回java.lang.reflectMethod类的对象。
这个类中有如下方法:
public Object invoke(Object obj,Object...args)

范例:反射调用普通方法(set,get方法)

package TestDemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

class Book{
    private String title;

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }
    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

}

public class TestDemo{
    
    public static void main(String[] args) throws Exception{
        Class<?> cls=Class.forName("TestDemo.Book");
        Object obj=cls.newInstance();//获取无参构造实例化对象 因为普通方法只能获取实例化对象调用
        //要操作的成员
        String fieldName="title";//
        Method setMet=cls.getMethod("set"+initcap(fieldName),String.class);
        Method getMet=cls.getMethod("get"+initcap(fieldName));
        setMet.invoke(obj, "Java Dev");//等价于Book类对象.setTitle("Java Dev")
        System.out.println(getMet.invoke(obj));
    }   

    public static String initcap(String str){//首字母大写方法
        return str.substring(0,1).toUpperCase()+str.substring(1);
    }


}


最终实现通过反射调用普通方法。


image.png

此时完全看不见具体的操作类型,也就是说利用反射可以实现任意类指定方法的调用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(...
    架构师springboot阅读 5,476评论 0 3
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 5,814评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,618评论 0 11
  • 孩子开学二十多天,考了几次测试了。数学一次九十分已上,一次还没九十分。英语一次85分,语文没发布成绩。看到这个分...
    零雨淇蒙阅读 3,043评论 2 5
  • 隔岸停杯独挂簪,更声犹缓入高砧。 远晴催落三明月,宿醉呼来一老琴。 不觉归迟惊妾意,应知别后问乡音。 枯梅暗送阑珊...
    张成昱阅读 5,639评论 8 67

友情链接更多精彩内容