java 利用反射调用静态方法的示例

摘要:
内容介绍主要介绍在执行类中使用反射机制调用静态方法。

内容简介

主要介绍使用反射的机制来调用执行类中的静态方法。

静态方法

public class GisUtil {

    private final static Logger logger = LoggerFactory.getLogger(GisUtil.class);

    public static ExportMethodResultDto gisService1 (String str){
        logger.info("进入gisService1方法,参数[str]:" + str);
        ExportMethodResultDto dto = new ExportMethodResultDto();
        LocalDateTime currentTime = LocalDateTime.now();
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        dto.setJobId(df.format(currentTime));
        dto.setOutFilePath("E:\DocDirectory\test.doc");
        return dto;
    }

    public static ExportMethodResultDto gisService2 (ExportProjectRasterParam param){
        logger.info("进入gisService2方法...");
        logger.info("参数[param]=" + param);
        ExportMethodResultDto dto = new ExportMethodResultDto();
        String uuId = StrUtil.getUUID();
        dto.setJobId(uuId);
        dto.setOutFilePath("E:\"+ uuId +"\srtm_49_02_raster.shp");
        return dto;
    }
}

调用

String str = "test_service_1";
Class<?> threadClazz = Class.forName("com.lgt.demo2.gisService.util.GisUtil");
Method method = threadClazz.getMethod("gisService1", String.class);
ExportMethodResultDto dto = (ExportMethodResultDto)method.invoke(null, str);
logger.info("gisService1返回:");
logger.info("   jobId:"+ dto.getJobId());
logger.info("   OutFilePath:" + dto.getOutFilePath());

ExportProjectRasterParam param = new ExportProjectRasterParam();
param.setCellSize("1");
param.setResamplingType("NEAREST");
param.setInCoorSystem("GCS_WGS_1984");
param.setOutCoorSystem("GCS_China_Geodetic_Coordinate_System_2000");
Method method2 = threadClazz.getMethod("gisService2", ExportProjectRasterParam.class);
ExportMethodResultDto dto2 = (ExportMethodResultDto)method2.invoke(null,param);
logger.info("gisService2返回:");
logger.info("   jobId:"+ dto2.getJobId());
logger.info("   OutFilePath:" + dto2.getOutFilePath());

输出结果

2019-07-03 14:51:08.816  INFO 332 --- [nio-8080-exec-2] com.lgt.demo2.gisService.util.GisUtil    : 进入gisService1方法,参数[str]:test_service_1
2019-07-03 14:51:08.852  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      : gisService1返回:
2019-07-03 14:51:08.853  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      :    jobId:2019-07-03 14:51:08
2019-07-03 14:51:08.853  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      :    OutFilePath:E:DocDirectory	est.doc
2019-07-03 14:51:08.853  INFO 332 --- [nio-8080-exec-2] com.lgt.demo2.gisService.util.GisUtil    : 进入gisService2方法...
2019-07-03 14:51:08.854  INFO 332 --- [nio-8080-exec-2] com.lgt.demo2.gisService.util.GisUtil    : 参数[param]=[inCoorSystem:GCS_WGS_1984,outCoorSystem:GCS_China_Geodetic_Coordinate_System_2000,resamplingType:NEAREST,cellSize:1]
2019-07-03 14:51:08.858  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      : gisService2返回:
2019-07-03 14:51:08.859  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      :    jobId:79b4e82ef4564855881ecb4030ba39e2
2019-07-03 14:51:08.859  INFO 332 --- [nio-8080-exec-2] c.l.d.f.controller.StringController      :    OutFilePath:E:79b4e82ef4564855881ecb4030ba39e2srtm_49_02_raster.shp

用到的实体类

java 利用反射调用静态方法的示例第1张java 利用反射调用静态方法的示例第2张
public class ExportMethodResultDto implements Serializable {

    private String outFilePath;//生成文件的绝对路径
    private String jobId;//GIS调用异步服务响应的jobId

    public String getOutFilePath() {
        return outFilePath;
    }

    public void setOutFilePath(String outFilePath) {
        this.outFilePath = outFilePath;
    }

    public String getJobId() {
        return jobId;
    }

    public void setJobId(String jobId) {
        this.jobId = jobId;
    }
}
ExportMethodResultDto
java 利用反射调用静态方法的示例第1张java 利用反射调用静态方法的示例第4张
public class ExportProjectRasterParam implements Serializable {
    private String inCoorSystem;//输入坐标系
    private String outCoorSystem;//输出坐标系
    private String resamplingType;//重采样算法(可选)
    private String cellSize;//像元大小(可选)

    public String getInCoorSystem() {
        return inCoorSystem;
    }

    public void setInCoorSystem(String inCoorSystem) {
        this.inCoorSystem = inCoorSystem;
    }

    public String getOutCoorSystem() {
        return outCoorSystem;
    }

    public void setOutCoorSystem(String outCoorSystem) {
        this.outCoorSystem = outCoorSystem;
    }

    public String getResamplingType() {
        return resamplingType;
    }

    public void setResamplingType(String resamplingType) {
        this.resamplingType = resamplingType;
    }

    public String getCellSize() {
        return cellSize;
    }

    public void setCellSize(String cellSize) {
        this.cellSize = cellSize;
    }

    public String toString(){
        return String.format("[inCoorSystem:%s,outCoorSystem:%s,resamplingType:%s,cellSize:%s]",this.inCoorSystem,this.outCoorSystem,this.resamplingType,this.cellSize);
    }
}
ExportProjectRasterParam

免责声明:文章转载自《java 利用反射调用静态方法的示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS下使用LVM进行分区(转)关于deepin如何把CD制作成iso的测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

批量修改文件编码格式

摘要: 最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共100多个文件,如果用编辑器另存为utf8,那就悲催了。所以自己就写了个程序,批量修改文件编码格式。 代码: /** * 修改文件编码格式,例如:GBK转UTF8 * 支持多级目录 * @param {String} [root_path] [需要进行转码...

freemarke之TemplateDirectiveModel详解

http://hougbin.iteye.com/blog/1457924 TemplateDirectiveModel接口是freemarker自定标签或者自定义指令的核心处理接口。通过实现该接口,用户可以自定义标签(指令)进行任意操作,、 任意文本写入模板的输出。 该接口中只定义了如下方法,当模板页面遇到用户自定义的标签指令时,该方法会被执行。 pub...

JAVA 利用反射自定义数据层框架

       之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者,除了大学没有接触过任何c#的编程),我在大三开始搞工作室,接网站的单子,最难过的时候,一个人要写前台后台,说实话是JAVA把我引上了这条程序员...

lua 调试器(Decoda)

1、http://www.unknownworlds.com/decoda,这个工具可以注入到宿主程序内对lua脚本进行调试。 2、有2种方式对lua进行调试 从Decoda启动宿主程序 a、project菜单中的Settings b、在commond中填入你要运行的宿主程序。点击ok c、用它打开lua脚本设置断点。Decoda 中选择Start D...

OC对象的动态和静态构造区别

Student.h: #import <Foundation/Foundation.h> @interface Student : NSObject @property(nonatomic,retain) NSString * name; @property(nonatomic,assign) int age; @end Studen...

mybatis父查询值嵌套传递/column传入多个参数值197

mybatis中collection的column传入多个参数值(使用父查询的映射值) property description column 数据库的列名或者列标签别名。与传递给resultSet.getString(columnName)的参数名称相同。注意: 在处理组合键时,您可以使用column=“{prop1=col1,prop2=co...