我有一个属性文件(键/值)对,从中我当前根据键读取一个值,并在UI中显示该值。
复杂性增加了,现在基于某些公式,该值更具动态性。该公式包含一个变量参数,我将在运行时获取其值。
是否有任何java设计模式来设计此场景。
我想在属性文件中针对一个键放置一个方法名。
现在我将读取键并获取方法名称。此方法将计算该特定键的值。
请告诉我你的建议
使用Java内置JavaScript引擎计算表达式。为了更紧密地匹配这种精神,可以对属性使用JSON。
如果安全性很重要,则需要提供类过滤器。它可能非常简单且限制性很强,因为您只需要计算平凡的表达式。可以在这里找到有关类过滤器的示例。
看起来ANTLR会很适合这里。
它是一个解析器生成器。您将语法作为输入,作为回报,它将为您提供一个解析器。
您可以使用解析器将文本公式转换为已解析的树表示形式。之后,可以运行访问者来评估每个节点。您只需编写一些简单的函数来实现该行为,例如:
public Double visitAdd(AntlrNode left, AntlrNode right) {
Double left = visit(left);
Double right = viist(right);
return left + right;
}
语法非常接近熟悉的BNF表示法。您只需描述您的公式字符串是如何的。例如:
formula : left '+' right;
left: Number;
right: Number;
Number: [0-9]+;
是否有任何java设计模式来设计此场景。
我不知道是否有规律。
如果我正确理解你的问题,我可以解释我通常做什么。
#number#
小例子:
信息。属性
name.of.key = sum of #0# + #1# = #2#
然后,我从中读取值,并用适当的值替换数值(注意:这里对shortenes使用相同的方法,但我使用外部替换方法):
public void printSum(int n1, int n2) {
String myString = messageSource("name.of.key", Locale.getDefault(), null, null));
myString.replace("#0#", String.valueOf(n1));
myString.replace("#1#", String.valueOf(n2));
myString.replace("#2#", String.valueOf(n1+n2));
System.out.println(myString);
}
OUTPUTprintSum(1,2);
sum of 1 + 2 = 3
为了便于编程,CodeIgniter 使用了一些函数、方法、类 和 变量名来实现。 因此,这些名称不能被开发者所使用,下面是不能使用的保留名称列表。 控制器名称 因为你的控制器类将继承主程序控制器,所以你的方法命名一定不能和 主程序控制器类中的方法名相同,否则你的方法将会覆盖他们。 下面列出了已经保留的名称,请不要将你的控制器命名为这些: CI_Controller Default index 函
下面的这些名称不能在非方括号语法中被用作顶层变量 (比如 .vars["in"]),因为这是FTL中的关键字: true:布尔值"true" false:布尔值"false" gt:比较运算符"大于" gte:比较运算符"大于或等于" lt:比较运算符"小于" lte:比较运算符"小于或等于" as:由少数指令使用 in:由少数指令使用 using:由少数指令使用
这可能是更多的设计选择,我想“为什么要重新发明轮子”。有人可能已经需要这个了。 (我不想使用任何第三方框架,因为我的框架是一个小项目。我已经在使用Adam Bein的)。我正在JavaFX中实现一个独立的应用程序。我对MVC/MVP/MVVM非常感兴趣。由于javafx允许我使用fxml分离UI,所以我通过fxml实现了大部分UI设计。但在那里我遇到了一些问题。 tradeview.fxml(我所
问题内容: 我正在使用proguard混淆我的android应用程序。android应用程序包含一些本机代码,这些代码使回调到完全限定的java方法。我不必混淆这些类及其方法的名称。下面正确地保留了类名,但没有保留方法名。 问题答案: 对于本机方法:ProGuard手册>示例>处理本机方法 在这种情况下,对于回调方法:ProGuard手册>示例>处理回调方法 或者,例如,如果所有公共方法都可能是回
问题内容: 保留字可以用作对象的属性名称吗? 先前的堆栈溢出问题(浏览器支持在JavaScript中使用保留字作为属性名称)间接引发了此问题。答案似乎是AlexWayne的普遍共识: 您可以使用这些单词,但只能将其用作字符串,而不能用作速记属性。 虽然我认为他们在这方面可能比我了解更多,并且在某些情况下使用保留字可能不是一个 好主意 ,但基于两点,我认为他们的结论是错误的: 使用保留字作为“速记”
我需要使用属性名称替换xml文件中的属性值。 前任: 我有一个替换此值的目标。i、 e“默认值”。如果用户为属性测试名称指定了错误的值,则可以多次运行此目标。用户可以使用正确的值重试运行目标。因此,我不能使用正则表达式替换。我只能依靠物业名称。有没有一种方法可以在ant中使用属性值的名称来替换属性值?