还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦?
通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。
MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。
<dependency> <groupId>com.github.ismail-mekni</groupId> <artifactId>mxreflection</artifactId> <version>1.0.1</version> </dependency>
那如何使用这个框架呢?
很简单,只需要两个java注释。
1、通过@Arg值,我们可以指定要在目标函数中使用的自定义参数名称。
2、@Expression注释值包含带有参数的函数表达式。
这个框架的使用其实不难,下面是两个计算案例,通过案例其实很容易理解该怎么使用此框架:
案例1
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
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: 8
MXReflection框架支持mXparser数学库中提供的数学集合如下:
- Operators (+, -, *, /, #, !, ^)
- Binary Relations (=, ==, =<, =>, <, >, <>, !=, ~=)
- Boolean Operators (&, &&, /, ~&, ~&&, ~/, |, ||…)
- Bitwise Operators (@~, @&, @^, @|, @<<, @>>)
- Unary Functions (sin, cos, tan, tg, ctan, ctg, cot, sec,…)
- Binary Functions (log, mod, C, Bern, Stirl1, Stirl2, …)
- 3-args Functions (if, chi, CHi, Chi, cHi, pUni, cUni, qUni, pNor, cNor, qNor)
- Variadic Functions (iff, min, max, ConFrac, ConPol, gcd, …)
- Iterated Operators (sum, prod, avg, vari, stdi, mini, maxi)
- Calculus Operators (int, der, der-, der+, dern, diff, difb)
- Math Constants (pi, e, [gam], [phi], [PN], [B*], [F’d], [F’a], …)
- Physical Constants ([c], [G.], [g], [hP], [h-], [lP], [mP], [tP])
- Astronomical Constants ([ly], [au], [pc], [kpc], [Earth-R-eq], …)
- Random Variables ([Uni], [Int], [Int1], [Int2], [Int3], [Int4], …)
- Metric prefixes ([%], [%%], [Y], [sept], [Z], [sext], [E], …)
- Parser Symbols ((, ), ,, ;)
- Units
在参数解析方面,MXReflection支持以数字内容作为参数的所有字段数据类型。您可以将所有Java类型与返回数值结果的toString实现一起使用。支持的结果字段java类型有:
- Double
- double
- Long
- long
- String
- BigInteger
但是要注意的是注意,对于long、long和BigInteger,MXReflection使用在注入前解析最终结果。建议确保表达式返回整数类型。
扫描二维码关注我,回复关键词mxreflection
,获取源码库及项目示例!