从需求看问题会更清晰,更容易记住。
需求
我有一个自动化测试的用例用来测试一系列金融产品(Security)的交易过程(DoTrade),已开始金融产品就两三个,代码写成下面这样:
public void testDoTrade(String securityType){
Security s;
if(securityType == "Stock"){
s = new Stock();
s.doTrade();
}Else if(securityType == "Bond"){
s = new Bond();
s.doTrade();
}
}
很快,待测的金融产品越来越多,代码变得越来越冗余,并且需要反复的编译主类
解决
于是需要重构代码,代码可以一开始就设计得很周到,但是也可以遇到需求了再立即进行重构,各有各的好处,在快速的测试开发中,我会使用后一种方式,这种方式更加符合敏捷的思想。
import java.lang.reflect.*;
public void testDoTrade(String securityType){
Try{
Class cls = Class.forName(securityType);
Constructor c = cls.getConstructor();
Object obj = c.newInstance();
Method m = cls.getMethod("doTrade");
m.invoke(obj);
}
}
这样如果测试用例中加入了一个外汇的金融产品,我只需要定义一个外汇类(ForeignExchange),并编译出class文件即可。
总结:
以上其实就是Java反射的一个应用,在这个应用当中,我们可以在调用代码中动态的调用未知的类的函数,而且后续开发中再添加那些未知的类。这种动态调用的场景是反射的一个主要应用之一。当然反射还有很多其他的作用,比如突破private权限等,可能会在另外一篇笔记当中详细描述。
分享到:
相关推荐
每遇到一个`MethodCallExpr`,提取出被调用的方法名和调用者信息。 3. **构建调用图**:根据找到的方法调用信息,可以构建一个调用图,其中每个节点代表一个方法,边表示方法间的调用关系。 4. **分析调用链**:在...
// 准备调用函数 cs = connection.prepareCall("{? = call myfunc()}"); // 注册输出参数 cs.registerOutParameter(1, Types.VARCHAR); // 执行函数 cs.execute(); // 获取返回值 String retValue = ...
本资料"Java通过JNI调用C语言函数库的方法.zip"提供了一个名为"JavaJNIStudy-master"的项目,下面将详细介绍这一过程的关键知识点。 1. **JNI简介** JNI是Java平台的标准接口,它使得Java应用程序可以与本地代码...
6. **传递参数和接收结果**:在Delphi中,你可以使用上述函数,传入Java接口名、方法名以及参数,调用Java方法并获取返回值。 ```delphi const ClassName = 'com/example/MyJavaClass'; MethodName = '...
Java通过JNI(Java Native Interface)调用C函数是一种在Java应用程序中使用本地代码(C/C++)的技术。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。这种交互可以提升性能,利用已有的C/...
本文将深入探讨如何在Java中调用Python的自定义函数,特别是执行加法运算。我们将重点关注以下几个方面:Java与Python的互操作性、使用Apache的Jython库以及实际的代码示例。 首先,我们要理解Java与Python之间的互...
本教程将详细讲解如何在Android中实现JS与Java的双向函数调用,以及如何处理中文参数传递时的乱码问题。 1. **WebView组件** Android中的`WebView`组件是实现JavaScript与Java交互的基础。`WebView`可以加载HTML、...
在这个场景中,`函数1`首先创建了一个名为`ball`的对象实例,然后将其添加到舞台上(通过`addChild`方法),接着为这个对象添加了一个帧事件监听器,指向`函数2`。每当`Event.ENTER_FRAME`事件发生时,`函数2`就会被...
调用的时候直接用函数名就可以了。 例如: ```java public class create_function { public static void main(String []args){ int s = jia(5,4); System.out.println(s); } static int jia(int a, int b){ ...
Java函数速查手册是编程学习过程中...通过Java函数速查手册,你可以快速找到这些功能的详细解释和示例,有助于加深对Java编程的理解。对于初学者来说,熟练掌握这些基本的函数概念和使用方法是提升编程能力的关键步骤。
本合集主要探讨如何在Java中利用MyBatis来调用MySQL的存储过程和函数。 1. **存储过程和函数的基本概念** - 存储过程:是一组预先编译的SQL语句,可以包含输入、输出参数,能够执行复杂的数据库操作。 - 函数:与...
通过这个实例,我们了解了如何使用Java的JNI调用C语言函数的基本步骤:声明Java本地方法、生成C语言头文件、编写C代码、编译C代码为动态链接库,最后在Java中调用该库。这种方法在需要高效计算、底层系统交互或利用...
通过`com.sun.jna.FunctionMapper`,你可以指定一个函数名到Java方法的映射规则。 6. **字符串**:JNA支持NUL终止的C风格字符串,你可以使用`String`或`WString`(宽字符)类型作为参数。对于输入字符串,直接传递...
### JAVA通过代码调用MATLAB函数 #### 概述 在跨语言开发环境中,实现不同编程语言间的相互调用是一项非常实用的技术。本文档详细介绍了如何利用JAVA代码调用MATLAB函数的过程,这对于需要整合两种语言功能的应用...
本文将深入探讨如何使用C++创建Java虚拟机(JVM),并通过JNI来调用Java函数。这是一项技术性很强的任务,需要对C++编程、Java虚拟机的工作原理以及JNI接口有深入的理解。 首先,Java虚拟机(JVM)是Java平台的核心...
在上述代码中,你需要替换`your_sap_host`、`your_sap_system_number`、`your_sap_client`、`your_sap_user`、`your_sap_password`和`YOUR_RFC_FUNCTION_NAME`为实际的SAP系统信息和要调用的RFC函数名。同时,根据...
这个函数的声明使用特殊的JNI类型和函数名约定。例如,如果要在Java中调用名为`helloFromC`的方法,那么对应的C函数可能是这样的: ```c JNIEXPORT void JNICALL Java_com_example_MyActivity_helloFromC(JNIEnv ...
5. **在QT应用中调用C++函数**:在QT的事件处理或逻辑流程中,你可以调用`callJavaMethod()`,它会执行Java层的`doSomething()`方法,并将结果打印出来。 6. **打包和运行**:确保你的Java类(`.class`文件)被包含...
在这个场景中,我们关注的是如何利用Java反射调用来解析字符串并执行相关函数,最终获取返回值。下面将详细阐述这个过程。 首先,`ReflectUtils.java` 文件可能包含了一些静态方法,这些方法提供了反射操作的便利...
本案例将详细讲解如何在Java中通过本地方法调用C语言实现的功能,具体以一个调用系统时间的简单例子进行说明。 首先,我们来看`TimeShow.java`这个Java类,它通常包含了一个native方法声明,例如: ```java public...