
MXReflection,一个基于mXparser库功能的Java复杂计算框架。
还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦?
通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。
MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。
<dependency>
<groupId>com.github.ismail-mekni</groupId>
<artifactId>mxreflection</artifactId>
<version>1.0.1</version>
</dependency>dependencies {
compile group: 'com.github.ismail-mekni', name: 'mxreflection', version: '1.0.1'
}那如何使用这个框架呢?
很简单,只需要两个java注释。
1、通过@Arg值,我们可以指定要在目标函数中使用的自定义参数名称。
2、@Expression注释值包含带有参数的函数表达式。
这个框架的使用其实不难,下面是两个计算案例,通过案例其实很容易理解该怎么使用此框架:
案例1:
package com.ismail.mxreflection.example;
import com.ismail.mxreflection.annotations.Arg;
import com.ismail.mxreflection.annotations.Expression;
import com.ismail.mxreflection.core.Calculator;
import com.ismail.mxreflection.factory.MXFactory;
import org.junit.Test;
public class Example1Test {
class Example1 {
@Arg("f1")
String field1;
@Arg("f2")
int field2;
@Expression("f1 * sin(f2) * log2(f1 + f2) + der(cos(f1), f1) * pi + int(tan(f2), f2, 0, e)")
double field3;
}
@Test
public void example1Test() {
Example1 example1 = new Example1();
example1.field1 = "2.2";
example1.field2 = 5;
Calculator<Example1> calculator = MXFactory.createCalculator(Example1.class);
calculator.calculate(example1);
System.out.println("Field 3 result: " + example1.field3);
}
}Output:
Field 3 result: -34.32819235851987案例2:
package com.ismail.mxreflection.example;
import com.ismail.mxreflection.annotations.Arg;
import com.ismail.mxreflection.annotations.Expression;
import com.ismail.mxreflection.core.Calculator;
import com.ismail.mxreflection.factory.MXFactory;
import org.junit.Test;
public class Example2Test {
public class Example2{
@Arg("f1")
private String field1;
@Arg("f2")
private Long field2;
@Expression("f2 - f1")
@Arg("f3")
private double field3;
@Expression("f3 - f2")
@Arg("f4")
private double field4;
@Expression("f1 - f2")
@Arg("f5")
private Double field5;
@Expression("f4-f5")
@Arg("f6")
private String field6;
@Expression("f6-f5")
@Arg("f7")
private long field7;
@Expression("f7+5")
private Long field8;
}
@Test
public void exampleTest() {
Example2 example2 = new Example2();
example2.field1 = "2.2";
example1.field2 = 5; Calculator<Example2> calculator = MXFactory.createCalculator(Example2.class);
calculator.calculate(example2);
System.out.println("Field 3 result: " + example2.field3);
System.out.println("Field 4 result: " + example2.field4);
System.out.println("Field 5 result: " + example2.field5);
System.out.println("Field 6 result: " + example2.field6);
System.out.println("Field 7 result: " + example2.field7);
System.out.println("Field 8 result: " + example2.field8);
}
}Output:
Field 3 result: 2.8
Field 4 result: -2.2
Field 5 result: -2.8
Field 6 result: 0.6
Field 7 result: 3
Field 8 result: 8MXReflection框架支持mXparser数学库中提供的数学集合如下:
在参数解析方面,MXReflection支持以数字内容作为参数的所有字段数据类型。您可以将所有Java类型与返回数值结果的toString实现一起使用。支持的结果字段java类型有:
但是要注意的是注意,对于long、long和BigInteger,MXReflection使用在注入前解析最终结果。建议确保表达式返回整数类型。
关注我,回复关键词“mxreflection”,获取源码库及项目示例!
如果你喜欢本文,欢迎关注我,订阅更多精彩内容
关注我回复「加群」,加入Spring技术交流群
往期推荐
谨记!怎么样的编程会让你进监狱?
505天,240,000字,我总结了Spring Security 的学习曲线,免费送给大家
保姆级教程:Spring Boot 单元测试
搞开源也会被死亡恐吓!
@Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
好用到爆!多种数据库只需一个工具就能搞定!
喜欢的这里报道
↘↘↘