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\test.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:\79b4e82ef4564855881ecb4030ba39e2\srtm_49_02_raster.shp
用到的实体类
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
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 利用反射调用静态方法的示例的更多相关文章
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- 利用反射--调用一个按钮的Click事件
最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- C#利用反射调用PB编译的COM组件
问题: 1.根据COM组件的ProgID,得到COM组件公开的类型 2.创建COM组件提供的类型的对象 3.调用执行方法 正确姿势 C#利用反射调用(后期绑定)PB编译的COM组件 C#调用COM组件 ...
- Java中如何调用静态方法
Java中如何调用静态方法: 1.如果想要调用的静态方法在本类中,可直接使用方法名调用 2.调用其他类的静态方法,可使用类名.方法名调用 关于静态方法能被什么调用 1.实例方法 2.静态发放
- 【Java】反射调用与面向对象结合使用产生的惊艳
缘起 我在看Spring的源码时,发现了一个隐藏的问题,就是父类方法(Method)在子类实例上的反射(Reflect)调用. 初次看到,感觉有些奇特,因为父类方法可能是抽象的或私有的,但我没有去怀疑 ...
- java 利用jna调用c#的dll
一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...
随机推荐
- 通过元类创建一个Python类
通过元类创建一个Python类 最开始学pytohn的时候我们这样定义类 class ClassName: pass 当熟悉了元类的概念之后我们还可以这样创建 ClassName = type(&qu ...
- Win32API文本处理
工程模板:https://www.cnblogs.com/eternalmoonbeam/p/10793080.html 安全的文本输出方式: 需要额外包含头文件strsafe.h 依次使用以下三个函 ...
- Django-03-静态文件配置
一.django静态文件配置原理 静态文件配置就是为了让用户请求时django服务器能找到静态文件返回. 首先要理解几个概念: 媒体文件:用户上传的文件 静态文件:css,js,image等 开发环境 ...
- PAT(B) 1060 爱丁顿数(Java:21分)
题目链接:1060 爱丁顿数 (25 point(s)) 题目描述 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车 ...
- Python3定时器任务代码
使用threading写的一个定时器任务demo: import time import sys import signal import datetime import threading #定时器 ...
- 2019牛客国庆集训派对day3
E. Grid 大意: 给定$n\cdot m$个点的图, 初始无边, $q$个操作, $(1,a,b)$表示第$a$列到第$b$列全连起来, $(2,a,b)$表示把第$a$行到第$b$行全连起来, ...
- FastDFS安装指南
FastDFS安装指南 提前准备好的文件资料: 1.FastDFS--tracker安装 1.1 FastDFS安装环境 FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7. ...
- .NET Core 中三种模式依赖注入的生命周期。
注入模式 同一个请求作用域 不同的请求作用域 AddSingleton 同一个实例 同一个实例 AddScoped 同一个实例 新实例 AddTransient 新实例 新实例
- 谈一谈重 ORM 和 轻 ORM + SQL 的一些经验
ORM 的本质比较简单,就是对象关系映射 Object Relation Mapping 那很多人都经常会说的一个问题,EF 或 EF Core 好啊,方便啊,不用写麻烦的 SQL ,写 SQL 又要 ...
- css盒模型。边框和内外边距
css盒模型: 外边距 边框 内填充 内容 盒模型分为两种: 标准盒模型: 怪异盒模型(IE盒模型): 边框:border border: 10px solid blue;表示设置10像素蓝色实线条的 ...